[英]Trouble with S_ISXXX(m) macros from sys/stat.h
我在使用sys/stat.h
S_ISXXX(m)
宏時sys/stat.h
具體來說,幾乎所有內容都報告為目錄。 僅將常規文件正確報告為常規文件,鏈接,設備,FIFO,所有這些似乎都報告為目錄。
我是否缺少某些東西,或者這通常是錯誤的?
這是代碼,應該非常簡單(對捷克文字感到抱歉,但是即使您不了解,也應該明白這個主意:)
int listdir(const char *path)
{
struct dirent *polozka;
DIR *dir;
dir = opendir(path);
if (dir == NULL)
{
perror("nepovedlo se otevrit adresar");
return -1;
}
while((polozka = readdir(dir)))
{
struct stat info;
lstat(polozka->d_name,&info);
puts(polozka->d_name);
if (S_ISREG(info.st_mode))
puts("\tObycejny soubor");
if (S_ISDIR(info.st_mode))
puts("\tAdresar");
if (S_ISCHR(info.st_mode))
puts("\tZnakove zarizeni");
if (S_ISBLK(info.st_mode))
puts("\tBlokove zarizeni");
if (S_ISFIFO(info.st_mode))
puts("\tPojemenovana roura");
if (S_ISLNK(info.st_mode))
puts("\tSymbolicky link");
if (S_ISSOCK(info.st_mode))
puts("\tSocket");
}
closedir(dir);
return 0;
}
您沒有在檢查lstat
是否真正起作用,並且我猜測它失敗了。
polozka->d_name
僅包含文件名,而不包含路徑。 如果示例中的path
不是當前目錄,則大多數lstat
調用將失敗, info
處於未定義狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.