강좌 & 팁
글 수 2,412
2009.02.08 20:18:54 (*.238.107.244)
114427
낭만 프로그래머 미쉘린 블로그에 좋은 예제가 많네요. 이번 글은 인수로 받은 문자열에 대해 어떤 타입의 파일인지를 확인하는 것입니다. 때로 처리해야될 파일이 어떤 종류인지를 먼저 알아야되 경우가 있습니다. 이럴 때 매우 유용하리라 생각 됩니다.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
int i;
struct stat buf;
char *ptr;
for( i=1; i<argc; i++ )
{
printf("%s: ", argv[i]);
if( lstat(argv[i], &buf)<0 )
{
perror("lstat error");
continue;
}
if( S_ISREG(buf.st_mode) )
ptr = "regular";
else if( S_ISDIR(buf.st_mode) )
ptr = "directory";
else if( S_ISCHR(buf.st_mode) )
ptr = "character special";
else if( S_ISBLK(buf.st_mode) )
ptr = "block special";
else if( S_ISFIFO(buf.st_mode) )
ptr = "fifo";
#ifdef S_ISLNK
else if( S_ISLNK(buf.st_mode) )
ptr = "symbolic link";
#endif
#ifdef S_ISSOCK
else if( S_ISSOCK(buf.st_mode) )
ptr = "socket";
#endif
else
ptr = "** unknown mode **";
printf("%s\n", ptr);
}
exit(0);
}



lstat 은 파일의 타입을 읽어오는 함수입니다.
stat 과 lstat 이 있는데...
lstat 은 심볼릭링크의 경우 심볼릭링크 자체의 파일타입을 읽어오고
stat 은 심볼릭링크의 경우 심볼릭링크 가리키는 대상의 파일타입을 읽어오는 차이가 있습니다.
l 붙은 함수는 다 이런 차이가...


