我看到一些古老的代碼,simplifed Unix的路徑比較通過執行類似下面的僞代碼:Unix的線程安全路徑比較或規範化函數?
- 剝去最後一個路徑組件獲取目錄僅部分:/富/酒吧 - > /富
- GETCWD並記住原路徑
- CHDIR /富
- GETCWD並記住返回主調
- CHDIR老原路徑
是否有一個標準的Unix系統函數可以完成所有這些,而不會導致線程不安全的當前目錄操作?
互斥體可能會使該代碼序列線程不安全,但並不是非常理想(您必須知道使用getcwd或依賴於進程cwd的其他函數(包括系統和供應商代碼)保護的所有其他代碼相同的互斥體)。
很酷,不知道這個庫函數 – eruciform 2010-07-22 16:57:33
我曾經知道realpath()並忘記了它。它沒有用處(因而不值得記住)的原因在於它在某些平臺上也不是線程安全的(基本上使用所描述的被破壞的chdir'ing機制)。 – 2010-07-22 17:47:07
嗯。我現在在我們的代碼中看到了對該函數的調用。也許它現在在我們關心的所有平臺上都是線程安全的(幾年前這絕對不是這種情況,但我不記得具體情況)。 – 2010-07-22 17:55:46