강좌 & 팁
글 수 2,412
2009.02.08 20:18:54 (*.238.107.244)
90325
낭만 프로그래머 미쉘린 블로그에 좋은 예제가 많네요. 이번 글은 인수로 받은 문자열에 대해 어떤 타입의 파일인지를 확인하는 것입니다. 때로 처리해야될 파일이 어떤 종류인지를 먼저 알아야되 경우가 있습니다. 이럴 때 매우 유용하리라 생각 됩니다.
#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 붙은 함수는 다 이런 차이가...