繁体   English   中英

sys / stat.h中的S_ISXXX(m)宏出现问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM