2013-09-16 64 views
0
#include "stdlib.h" 
#include "sys/stat.h" 
#include "stdio.h" 

int main(){ 
    struct stat s; 
    lstat("../", &s); 
    if(S_ISDIR(s.st_mode) == 0){ 
      printf("yes\n"); 
    }else{ 
      printf("no\n"); 
    } 
} 

結果:「不」C:爲什麼S_ISDIR不能識別一個目錄?

當我運行這段代碼(例如,具有S_ISREG)的不同變化,我得到什麼,我希望每一次相反。因此,對於「../」的S_ISREG,我會得到「是」。我一直在搞這種東西一段時間(文件權限,目錄創建等),所以我不知道我是否搞砸了什麼或什麼。任何幫助,將不勝感激。

+0

這應該是一個答案。 –

+0

你是什麼意思?正如在這應該工作或它目前給我一個正確的答案? – user2784872

+0

@ user2784872:我在發佈答案之前發表了評論,R指的是這個答案。 – Mat

回答

0

您錯誤地使用了S_ISDIR。那將評估爲true如果你有一個目錄,你正在測試爲零,這是false

替換有:

if(S_ISDIR(s.st_mode)){ 
     printf("yes\n"); 
}else{ 
     printf("no\n"); 
} 

同爲其他宏象S_ISREG

這些宏的標準參考POSIX是,它說這在sys/stat.h

以下宏應提供用於檢測文件是否爲指定的類型。提供給宏的值m是來自stat結構的st_mode的值。 如果測試爲真,宏應評估爲非零值;如果測試是錯誤的,則爲0。

[...]
S_ISDIR(m)
 檢驗目錄。
[...]

+0

我不是說我不相信你,但它之前在工作。此外,手冊頁和[this](http://linux.die.net/man/2/stat)表示如果爲true,則返回零。 – user2784872

+0

在那個頁面中它說它返回0?如果您仍有疑問,請添加官方標準參考。 – Mat

+0

哇。我的錯。我猜我把歸來的價值歸因於宏...就像一個白癡。非常感謝。 – user2784872

相關問題