0
經過半個小時的閱讀手冊,我想分享我的發現,看到很多人在其他問題只是指向readdir
,這是不是線程安全的。在Linux中枚舉目錄內容的函數有哪些?
經過半個小時的閱讀手冊,我想分享我的發現,看到很多人在其他問題只是指向readdir
,這是不是線程安全的。在Linux中枚舉目錄內容的函數有哪些?
TL;博士不要使用readdir
或readdir_r
,他們是不安全的!使用scandir
。
readdir
不是線程安全的(實際上,它是POSIX中唯一與目錄相關的函數,它已知存在此缺陷)。當然,您可以在簡單的程序中使用它,但要小心!
readdir_r
是線程安全的,但使用起來真是痛苦不堪,特別是因爲您必須分配自己的緩衝區,並且它不像您想象的那樣直截了當(因爲不能保證文件的名稱將在所有情況下適用於所有* nixes和所有文件系統中的結構內提供的數組)。 There are workarounds,但是當你使用它們時,「不看,不管發生什麼」。
到目前爲止唯一完全安全的,簡單的使用功能,我知道的是scandir
:它是線程安全的和它本質上是做一切都是爲了你,離開你的目錄條目的乾淨陣列。雖然它可能不適合任何場合,但它肯定可以節省很多你不得不忍受的痛苦。