2014-09-26 39 views
0

在使用nftw像這樣,nftw傳遞tflag具有未定義值

nftw((argc < 2) ? "." : argv[1], rm, 20, FTW_DEPTH|FTW_PHYS) 

nftw正在經過的5到RM函數的tflag參數的值當它遇到一個目錄遍歷目錄。 ftw.h頭文件只爲tflag參數指定一個帶有4個值(0-3)的枚舉,其中FTW_D或1是目錄的適當值。 fpath值在所有情況下似乎都是正確的。

所以我的問題是這樣的。爲什麼tflag通過5而不是1,tflag是什麼意思?

編輯:

值實際上FTW_DP(目錄,子目錄都已經訪問過),這是在我沒有注意到的與環境相關的部分定義如下。

+2

[**頭文件的這個版本](http://www.scs.stanford.edu/histar/src/pkg/uclibc/include/ftw.h)表示5是'FTW_DP/*目錄中,所有的子目錄都被訪問過。* /' – jedwards 2014-09-26 14:11:32

+0

@jedwards通過程序,似乎確實如此。再次看看標題,我現在看到枚舉並沒有結束,我認爲它確實。感謝您指出了這一點。 – 2014-09-26 14:20:11

回答

2

nftw() POSIX規範說,標誌參數您rm功能應是一個:

  • FTW_D 的對象是一個目錄。
  • FTW_DNR 該對象是無法讀取的目錄。 fn函數不應被調用給它的任何後代。
  • FTW_DP 該對象是一個目錄和子目錄已被訪問。 (只有在標誌中包含FTW_DEPTH標誌時纔會發生此情況。)
  • FTW_F 該對象是非目錄文件。
  • FTW_NS 由於缺乏適當的權限,stat()函數在對象上失敗。傳遞給fn的stat緩衝區是未定義的。由於任何其他原因,stat()失敗將被視爲錯誤,並且nftw()應返回-1。
  • FTW_SL 該對象是一個符號鏈接。 (只有在標誌中包含FTW_PHYS標誌時纔會出現此情況。)
  • FTW_SLN 該對象是一個符號鏈接,它不命名現有文件。既然你不認同你的系統和標準沒有定義什麼號碼應與標誌參數相關聯(如果標誌不包括FTW_PHYS標誌應僅會出現這種情況。)

被叫功能,沒有人可以識別你的系統上的含義。然而,有足夠的選項,5似乎不合理的價值。

在Mac OS X(10.9.5)上,值5將是FTW_SL。在另一個基於OSF的系統中,jedwardscomment中的註釋5的值爲FTW_DP,因此完全證明我的觀察結果是由5表示的標誌是系統相關的。

相關問題