#include <stdio.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/stat.h>
//define BUFSIZ 1024
main(int argc, char *argv[])
{
void fatal(char *);
int fd;
DIR *dir;
char file[BUFSIZ + 1];
struct dirent *directory;
struct stat file_stat;
if(argc != 2)
{
puts("사용법 : a.out directory_name");
exit(0);
}
if((dir = opendir(argv[1])) == NULL)
fatal("opendir");
while(directory = readdir(dir))
{
if(strcmp(directory->d_name, ".") == 0 ||
strcmp(directory->d_name, "..") == 0)
continue;
if(directory->d_ino == 0)//삭제된 파일이면
continue;
sprintf(file, "%s/%s", argv[1], directory->d_name);
printf(directory->d_name);
if(lstat(file, &file_stat) < 0)//파일의 상태를 얻음
fatal("stat");
//stat()는 심볼릭 링크 파일을 발견하면 그 파일을 찾아가서
//정보를 반환하지만 lstat()는 심볼릭링크 자체에대한 정보를
//반환한다
//S_IFMT 0xF0000
//즉 아래는 상위 4bit만 읽겠다는 의미이다
switch(file_stat.st_mode & S_IFMT)//파일의 속성 파악
{
case S_IFDIR : putchar('/'); break;
case S_IFIFO : putchar('|'); break;
case S_IFLNK : putchar('@'); break;
}
//실행 가능한 일반 파일인지 검사
if((file_stat.st_mode & S_IFMT) == S_IFREG)//정규파일이면
if(file_stat.st_mode & S_IEXEC)//실행가능하면
putchar('*');
putchar('\t');
}
putchar('\n');
closedir(dir);
}
void
fatal(char *error_name)
{
perror(error_name);
exit(1);
}
'EMBEDDED > SYSTEM Proc' 카테고리의 다른 글
[Normal] ls -R(재귀함수사용) (0) | 2012.07.13 |
---|---|
[Normal] ls -l 긴 형식으로 출력 (0) | 2012.07.13 |
[analysis] lint, splint (0) | 2012.07.13 |
[Process] n개의 프로세스 체인을 만드는 프로그램 (0) | 2012.07.13 |
[Normal] 프로그램 cpu사용률을 출력하는 exit 핸드러를 가지는 프로그램 (0) | 2012.07.13 |