Why does fopen("any_path_name",'r') not give NULL as return?
我結識,在linux下的目錄和文件都被認爲是文件。所以當我給讀取模式fopen任何目錄路徑或文件路徑它不給NULL文件描述符和?
那麼我該如何檢查它是否是dirctory路徑或文件路徑?如果我從命令參數獲得一些路徑?
Why does fopen("any_path_name",'r') not give NULL as return?
我結識,在linux下的目錄和文件都被認爲是文件。所以當我給讀取模式fopen任何目錄路徑或文件路徑它不給NULL文件描述符和?
那麼我該如何檢查它是否是dirctory路徑或文件路徑?如果我從命令參數獲得一些路徑?
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
通常文件有擴展名,例如 「* .TXT」,「 * .log「,因此,基於此,你可以知道它是一個文件還是目錄,但是等待更好的答案 – ComputerSaysNo
已經問過類似或相同的問題。 請參閱 http://stackoverflow.com/questions/1036625/differentiate-between-a-unix-directory-and-file-in-c和 http://stackoverflow.com/questions/146924/how-can -i-tell-if-a-given-path-is-a-directory-or-a-file-cc – riship89
@DorinDuminica:在UNIX上下文中,依靠後綴來識別任何東西被認爲是不好的樣式。首先考慮文件屬性(如本例中的文件類型),然後嘗試使用'file'來標識文件,並且只有在沒有其他操作的情況下才會使用擴展名。 – thiton