設定程序的 umask 為 EXPR 並傳回前一個值。如果省略 EXPR,只會傳回目前的 umask。
Unix 權限 rwxr-x---
表示為三組三個位元,或三個八進位數字:0750
(開頭的 0 表示八進位,不是數字之一)。umask
值就是一個代表已停用權限位元的數字。傳遞給 mkdir
或 sysopen
的權限(或「模式」)值會受到 umask 修改,因此即使您告訴 sysopen
以權限 0777
建立檔案,如果您的 umask 是 0022
,那麼檔案實際上會以權限 0755
建立。如果您的 umask
是 0027
(群組無法寫入;其他人無法讀取、寫入或執行),那麼傳遞 0666
給 sysopen
會建立模式為 0640
的檔案(因為 0666 &~ 027
是 0640
)。
以下是建議:提供常規檔案的建立模式 0666
(在 sysopen
中),以及目錄(在 mkdir
中)和可執行檔案的建立模式 0777
。這使用戶可以自由選擇:如果他們想要受保護的檔案,他們可能會選擇 022
、027
,甚至特別反社會的遮罩 077
。程式很少會(如果有的話)做出更適合使用者決定的政策決定。例外情況是寫入應該保密的檔案:郵件檔案、網路瀏覽器 Cookie、.rhosts 檔案等。
如果您的系統未實作 umask(2),而您正在嘗試限制對 自己 的存取(即 (EXPR & 0700) > 0
),則會引發例外。如果未實作 umask(2),而您並未嘗試限制對自己的存取,則會傳回 undef
。
請記住,遮罩是一個數字,通常以八進制表示;它不是八進制數字字串。如果您只有一個字串,請參閱 oct
。
移植性問題:perlport 中的「umask」。