我如何检查这是目录path还是任何文件名path?

这样

为什么fopen(“any_path_name”,“r”)不能返回NULL?

我知道,在Linux目录文件被认为是文件。 所以当我给读取模式的fopen任何目录path或文件path它不给NULL文件描述符和?

那么如何检查是否是dirctorypath或文件path? 如果我从命令参数得到一些path?

Solutions Collecting From Web of "我如何检查这是目录path还是任何文件名path?"

man 2 stat

 NAME fstat, fstat64, lstat, lstat64, stat, stat64 -- get file status ... struct stat { dev_t st_dev; /* ID of device containing file */ mode_t st_mode; /* Mode of file (see below) */ ... The status information word st_mode has the following bits: ... #define S_IFDIR 0040000 /* directory */ 

您可以使用S_ISDIR宏。

谢谢zed_0xff和lgor Oks

这个东西可以通过这个示例代码来检查

 #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main() { struct stat statbuf; FILE *fb = fopen("/home/jeegar/","r"); if(fb==NULL) printf("its null\n"); else printf("not null\n"); stat("/home/jeegar/", &statbuf); if(S_ISDIR(statbuf.st_mode)) printf("directory\n"); else printf("file\n"); return 0; } 

输出是

 its null directory