我遇到来自S_ISXXX(m)
sys/stat.h
个宏的问题
特别是几乎所有内容都报告为目录。只有常规文件被正确报告为常规文件,链接,设备,fifos,似乎都被报告为目录。
我是否遗漏了某些内容,或者这是否经常被窃听?
这是代码,应该非常简单(对于捷克文本很抱歉,但是你应该在不理解的情况下得到这个想法:)
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;
}
答案 0 :(得分:3)
你没有检查lstat
是否真的有效,我猜它失败了。
polozka->d_name
仅包含没有路径的文件名。如果示例中的path
不是当前目录,则大多数lstat
调用都将失败,导致info
处于未定义状态。