2012-01-08 58 views
2

由於某種原因,我正在寫一個文件監視器和stat,因此無法獲取文件信息,爲什麼?stat無法正常工作


struct stat info; 
int fd = open(path, O_EVTONLY); 
if (fd <= 0){ 
    exit(-1); 
} 
int result = fstat(fd, &info); 
if (!result){ 
    exit(-1); //This happens! Errno says "No such file or directory" but that cant be because open would've failed 
} 
+1

我認爲你需要fstat()。 – wildplasser 2012-01-08 16:42:39

+0

@wildplasser是的,我用它,只是錯打這裏 – chacham15 2012-01-08 16:45:19

+0

好吧,不要錯過。人們可以對錯誤的錯誤做出反應。 – wildplasser 2012-01-08 16:47:18

回答

4
int result = fstat(fd, &info); 
if (!result){ 
    exit(-1); 
} 

檢查fstat man頁面,如果成功則返回0。

+0

哈哈,深夜編碼。謝謝! – chacham15 2012-01-08 16:44:14

+0

@ chacham15不客氣! – ouah 2012-01-08 16:45:49

+0

我更新了使用'fstat'而不是'stat'的答案。 – ouah 2012-01-08 16:48:51

3

stat成功返回零,就像大多數標準的libc函數一樣。

這被設計成這樣的,所以你可以很容易地在庫調用鏈檢查錯誤:

if (stat(fd, &info)) { 
    perror("stat"); 
    exit(1); 
} 
//stat succeeded. 

if (...) { 

} 
1

從您的使用情況,我想你想的fstat()。 fstat()以fd爲參數,stat()爲字符串。