2011-05-10 18 views
0

我遇到S_ISXXX(m)宏麻煩S_ISXXX(M)宏從sys/stat.h麻煩與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; 
} 
+0

我不認爲他們是越野車 - 顯示你的代碼! – 2011-05-10 09:59:45

+0

@Tamás這是代碼。 – 2011-05-10 10:02:18

回答

3

你不檢查是否lstat實際工作,我猜測它是失敗的。

polozka->d_name只包含沒有路徑的文件名。如果您示例中的path不是當前目錄,則大多數lstat調用都會​​失敗,使info處於未定義狀態。

+0

是的,它似乎是微不足道的:) Thx – 2011-05-10 10:14:56