使用lstat()判断文件类型
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #define _GNU_SOURCE int main (int argc, char *argv[]){ struct stat buf; for(int i = 1; i < argc; i++){ if(lstat(argv[i], &buf) < 0){ printf("lstat invoke error."); continue; } printf("%s is a ", argv[i]); if (S_ISREG(buf.st_mode)){ printf("regular file."); }else if(S_ISDIR(buf.st_mode)){ printf("direcotry."); }else if(S_ISBLK(buf.st_mode)){ printf("block device."); }else if(S_ISCHR(buf.st_mode)){ printf("character device."); }else if(S_ISFIFO(buf.st_mode)){ printf("FIFO."); }else if(S_ISLNK(buf.st_mode)){ printf("soft link."); }else if(S_ISSOCK(buf.st_mode)){ printf("socket."); }else printf("Unkown type."); } printf("\n"); exit(0); }
编译时出现以下错误:
filetype.c: In function ‘main’: filetype.c:14:9: warning: implicit declaration of function ‘lstat’ [-Wimplicit-function-declaration] filetype.c:31:9: warning: implicit declaration of function ‘S_ISSOCK’ [-Wimplicit-function-declaration] /tmp/ccLbzony.o: In function `main': filetype.c:(.text+0x182): undefined reference to `S_ISSOCK' collect2: error: ld returned 1 exit status第一个不warning不影响运行,第二个又是怎么回事?