http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_programming&no=2935 [º¹»ç]
µ¶ÇÐÀ¸·Î ¸®´ª½ºC°øºÎ ½ÃÀÛÇߴµ¥¿ä. ¹®Á¦¸¦ Ç®´Ù ¸·Çô¼¿ä. Çؼ®°¡´ÉÇϽŠºÐ ÄÚµåÇؼ® Á» ºÎŹµå¸³´Ï´Ù.
#include <stdio.h>
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>
extern const char *fmt_mode(mode_t mode);
const char *fmt_mode(mode_t mode)
{
static char result[11];
strcpy(result, "----------");
if (S_ISDIR(mode))
result[0] = 'd';
else if (S_ISCHR(mode))
result[0] = 'c';
else if (S_ISBLK(mode))
result[0] = 'b';
else if (S_ISREG(mode))
result[0] = '-';
else if (S_ISFIFO(mode))
result[0] = 'p';
else if (S_ISLNK(mode))
result[0] = 'l';
else if (S_ISSOCK(mode))
result[0] = 's';
else
return result;
if ((mode & S_IRUSR) != 0)
result[1] = 'r';
if ((mode & S_IWUSR) != 0)
result[2] = 'w';
switch (mode & (S_ISUID|S_IXUSR)) {
case S_ISUID|S_IXUSR:
result[3] = 's';
break;
case S_ISUID:
result[3] = 'S';
break;
case S_IXUSR:
result[3] = 'x';
break;
}
if ((mode & S_IRGRP) != 0)
result[4] = 'r';
if ((mode & S_IWGRP) != 0)
result[5] = 'w';
switch (mode & (S_ISGID|S_IXGRP)) {
case S_ISGID|S_IXGRP:
result[6] = 's';
break;
case S_ISGID:
result[6] = 'S';
break;
case S_IXGRP:
result[6] = 'x';
break;
}
if ((mode & S_IROTH) != 0)
result[7] = 'r';
if ((mode & S_IWOTH) != 0)
result[8] = 'w';
switch (mode & (S_ISVTX|S_IXOTH)) {
case S_ISVTX|S_IXOTH:
result[9] = 't';
break;
case S_ISVTX:
result[9] = 'T';
break;
case S_IXOTH:
result[9] = 'x';
break;
}
return result;
}
char *myname;
int process(char *dir);
int main(int argc, char **argv)
{
int i;
int errs = 0;
myname = argv[0];
if (argc == 1)
errs = process(".");
else
for (i = 1; i < argc; i++)
errs += process(argv[i]);
return (errs != 0);
}
int
process(char *dir)
{
DIR *dp;
struct dirent *ent;
struct stat sbuf;
char fullname[PATH_MAX];
if ((dp = opendir(dir)) == NULL) {
fprintf(stderr, "%s: %s: cannot open for reading: %s\n",myname, dir, strerror(errno));
return 1;
}
errno = 0;
while ((ent = readdir(dp)) != NULL) {
sprintf(fullname, "%s/%s", dir, ent->d_name);
if (stat(fullname, & sbuf) < 0) {
fprintf(stderr, "stat: %s: %s\n",ent->d_name, strerror(errno));
continue;
}
printf("%8ld %s %lu %s\n", ent->d_ino, fmt_mode(sbuf.st_mode),sbuf.st_nlink, fullname);
}
if (errno != 0) {
fprintf(stderr, "%s: %s: reading or stating directory entries: %s\n",myname, dir, strerror(errno));
return 1;
}
if (closedir(dp) != 0) {
fprintf(stderr, "%s: %s: closedir: %s\n",myname, dir, strerror(errno));
return 1;
}
return 0;
} |
Hit : 3774 Date : 2011/04/05 01:31
|