umask() 系統呼叫如何屏蔽權限

umask() 系統呼叫如何屏蔽權限

我正在使用umask()系統呼叫來設定檔案權限。我正在使用以下程式碼:

umask(S_IWGRP | S_IWOTH);
printf("Enter file name that you want to create:");
scanf(" %s",file);
fd = open(file,O_CREAT|O_WRONLY);

但執行後,將使用以下給定的權限建立文件

--wS-----T 1 rvi rvi     0 Oct  2 15:20 test.txt

S這一點點是T做什麼用的?為什麼它會自動修改?

答案1

當您使用 O_CREAT 呼叫 open 時,它需要第三個參數來表示檔案的模式。然後,umask 將從您要求的模式中封鎖掉。因此,例如:

umask(S_IWGRP | S_IWOTH /* == 0022 */);
fd = open(file, O_CREAT|O_WRONLY, 0777);

將建立一個帶有標誌 0777 & (~0022) = 0755 的文件,即 rwxr-xr-x,而:

umask(S_IWGRP | S_IWOTH);
fd = open(file, O_CREAT|O_WRONLY, 0666);

將建立一個帶有標誌 0666 & (~0022) = 0644 的文件,即 rw-r--r--。在您的情況下,因為您沒有提供模式參數,所以 open 函數會從堆疊中取出隨機數據,因此您唯一知道的是用 umask 屏蔽的位元將被關閉。嘗試向公開呼叫提供您想要的模式; 0777 是可執行檔的不錯選擇,0666 是非可執行檔的不錯選擇。

相關內容