2010-03-23 109 views
0

在目錄中創建或刪除文件時,通過readdir()或scandir()讀取目錄條目安全嗎?我應該更喜歡一個嗎?安全地閱讀目錄內容

編輯:當我說「安全」我的意思是這些函數返回的條目是有效的,可以在不崩潰的程序運行。

謝謝。

回答

2

這取決於你的意思是「安全」。它們是安全的,因爲它們不應該讓你的程序崩潰。但是,如果您在讀取/掃描該目錄時創建/刪除文件,則返回的文件集可能不是最新的。

當讀取/掃描目錄條目的目錄時,文件指針(目錄只是特殊類型的文件)向前移動。但是,根據文件系統,可能無法阻止在文件指針後面的空目錄條目插槽中創建新文件。因此,readdir()/ scandir()可能不會立即檢測到新添加的目錄條目。類似的推理適用於文件刪除/目錄條目刪除。

希望這會有所幫助。

1

您對安全的定義是什麼?您不會使系統崩潰,並且readdir/scandir不會使程序崩潰。儘管他們可能會爲您提供立即過時的數據。

閱讀目錄的通常語義是,如果您從頭到尾閱讀目錄,您將看到所有在此期間沒有更改過的文件,只有一次,您將看到創建的文件或在此期間最多刪除一次。在類UNIX系統上,readdir()和scandir()是在相同底層系統調用(Linux中的getdents(),BSD中的getdirentries())之上實現的庫函數。所以在這方面的行爲應該沒有太大的差別。我認爲readdir()更具標準性,因此將更具可移植性。