2009-12-12 36 views
4

使用fchmod(int fildes, mode_t mode)比使用chmod(const char * path,mode_t模式)更好一些?在chmod上使用fchmod會更好嗎?

+1

上下文是什麼? – 2009-12-12 05:59:58

+0

我只是想知道一般。 – PJT 2009-12-12 06:33:44

+0

查看Omnifarious的答案,例如http://www.mail-archive.com/[email protected]/msg00128.html。所以,我會說永遠使用fchmod。 – 2009-12-12 06:37:03

回答

8

這幾乎完全相同。 chmod將稍微長一些,因爲它必須將路徑轉換爲inode或filenode,而fchmod已經查找了inode/filenode。

當然,也有因爲文件已經知道存在可能與fchmod更少發生錯誤情況,有權限的開放等

0

如果您正在處理文件的內容,你已經有了文件描述符(或者因爲您使用open()來獲取它,或者因爲您使用了fopen()並且可以使用指針獲取它),則可以使用fchmod()。如果您不想打開文件進行任何處理,只需更改模式,請使用chmod()

6

這取決於比賽條件是否是一個問題。使用chmod時,可能會導致某人將您的文件從您的下方重命名並修改錯誤的文件。在某些情況下(特別是如果你是根),這可能是一個巨大的安全漏洞。

+0

如果有人在打開文件描述符到'fchmod'之前重命名文件? – 2009-12-12 06:28:55

+0

偉大的一點。我找到了一個真實世界的例子http://www.mail-archive.com/[email protected]/msg00128.html。謝謝! – 2009-12-12 06:35:18

+0

@覈查員,這也是一種可能性。但是在打開文件描述符之後,您可以執行fstat並比較用戶和組ID(或者查看文件數據,甚至可能還有其他測試),以確保獲得正確的文件。此外,在許多情況下,您正在修改您創建的文件,因此在公開呼叫中沒有競爭條件。 – Omnifarious 2009-12-12 06:59:50

相關問題