2016-07-15 135 views
2

在我的shell中,我有一個文件,我用sudo chmod 4755 <file>更改了此文件的權限。在此文件上調用lstat後,我看到有關其權限的正確信息,特別是它具有4755作爲其權限模式。無法獲得所有權限位

在我的golang程序中,是否有一個原因,我沒有得到正確的權限模式位?難道我只是格式化從FileInfo()獲得的結果Mode().Perm()不正確?難道上面的3位是「特殊的」?

感謝您的幫助!

回答

1

簡短回答:三個高位是特殊的,需要單獨訪問。

Long答案:documentation解釋說,9個(通常是12個)最低有效位被認爲是標準的Unix權限。

該文檔還定義了Perm()功能您呼叫的行爲:

func (m FileMode) Perm() FileMode 

Perm returns the Unix permission bits in m. 

這意味着,燙髮沒有定義返回任何你正在尋找額外位。

此外,source code顯示Perm()函數掩蓋從FileMode()返回的值,0777導致忽略前三位。

ModeSetuidModeSetgid,和ModeSticky位(4,2和1分別地)每個必須作爲FileMode類型的常量單獨訪問。通過執行你自己的面具來做到這一點。

爲了確定粘性位是否已設置,例如,執行 (FileInfo().Mode() & ModeSticky) != 0。這同樣適用於ModeSetuidModSetgid

+0

你是說這些位被屏蔽了嗎?我嘗試做類似(Perm()&ModeSticky),但我不認爲這是他正確的方式去... – steve

+0

我更新了我的答案,更具體的指示。用任何東西掩飾'Perm()'都無濟於事。您正在查找的模式位已經被'Perm()'返回的值所掩蓋。在屏蔽該值之前,您需要進一步訪問該變量。 – CorbinMc

+0

非常感謝!我只需要稍微調整我的實現。 – steve

相關問題