umask的作用是為程序設定檔案模式建立遮蔽字,也就是說linux中每建立乙個檔案,則檔案許可權取決於umask設定的遮蔽狀態。
1 檔案許可權
理解umask之前,先看下檔案許可權。
所有檔案型別(目錄檔案、字元特別檔案等)都有訪問許可權,很多人認為只有普通檔案有訪問許可權,這是一種誤解。每個檔案的9個訪問許可權位,可以分成三類,見下表1,表中u表示使用者,即檔案的所有者,g表示組,o表示其他。可以使用chmod修改檔案許可權。
程序每次開啟、建立或刪除乙個檔案時,核心就進行檔案訪問許可權測試。
若程序的有效id是0,既超級使用者,則允許訪問,超級使用者root對整個檔案系統進行處理的最充分的自由。
若有效id為檔案的所有者,那麼程序根據相應的許可權位訪問該檔案,使用者對該檔案對應的讀為為1,則可讀,寫位為1,則可寫,執行位為1,則可以執行。
其他使用者的訪問許可權被設定,則允許訪問,否則拒絕。 表1
2 umask的作用
umask函式為程序設定檔案模式,並返回以前的值。
#include
mode_t umask( mode_t cmask);
輸入引數cmask就是表1的9個引數構成的或( | ),如(s_irusr|s_iwusr)。
程序建立乙個檔案或者目錄,就一定會使用該檔案模式去建立遮蔽字,在檔案模式建立遮蔽字中為1的位,在檔案mode中相應位則一定要關閉。就是說取反。看如下umask例子。
#include "apue.h"
#include #define rwrwrw (s_irusr|s_iwusr|s_irgrp|s_iwgrp|s_iroth|s_iwoth)
int main(void)
採用gcc編譯**,gcc umask.c apue.h -o a.out ,在shell中輸入./a.out,在輸入命令ls -l ,bar和foo的許可權如下,umask(0)的時候,按0取反,就是666(檔案)或者777(資料夾),這裡的6=4(讀)+2(寫)就是程序建立的檔案對所有使用者具有可讀可寫,umask(s_irgrp | s_iwgrp | s_iroth | s_iwoth)裡的遮蔽字可以對照**來看,遮蔽了使用者組和其他使用者的讀寫。同時需要注意的是creat函式,如果已存在該檔案,將不會重新建立。
-rw------- 1 zhouzhenhe zhouzhenhe 0 oct 21 13:12 bar
-rw-rw-rw- 1 zhouzhenhe zhouzhenhe 0 oct 21 13:12 foo
umask的引數按位取反就是允許的建立檔案許可權,004表示阻止其他使用者讀,002表示阻止其他使用者寫,400表示阻止使用者讀。記住4讀2寫1執行。
umask 學習筆記
我們建立檔案的預設許可權是怎麼來的?如何改變這個預設許可權呢?umask是什麼?一 許可權掩碼umask umask是chmod配套的,總共為4位 gid uid,屬主,組權,其它使用者的許可權 不過通常用到的是後3個,例如你用chmod 755 file 此時這檔案的許可權是屬主讀 4 寫 2 執...
APUE學習筆記 執行緒
採用多執行緒模式可以採用同步程式設計,而非非同步程式設計,可以簡化程式設計 多個程序間可以很方便的共享資料 可以通過pthread self獲得自身的執行緒id。執行緒id只在程序內部唯一。新建立執行緒不能保證那個執行緒先執行,新縣城可以訪問程序的位址空間,繼承執行緒的浮點環境和訊號遮蔽字。如果任意...
APUE學習筆記 2
檔案i o 5個函式 open read write lseek 以及close lseek off t lseek int filedes,off t offset,int whence 若whence是seek set 定義在sys types.h中 則將該檔案的位移量設定為距檔案開始處offs...