簡體   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