一、umask函數
#include <sys/stat.h>
mode_t umask(mode_t cmask);
//傳回值:傳回之前檔案模式建立的屏蔽字
//此函數是少數不會出錯的函數之一
- 功能:如果程式建立檔案,則使用此函數來限制檔案的通路權限,此函數設定的常量不會被設定到建立的檔案的權限中去
- 注意事項:程式調用此函數并不會影響到系統的umask屬性
- cmask參數:此參數可以為下面的9個常量的按位或構成

二、示範案例
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int main()
{
umask(0);
if (creat("foo", RWRWRW) < 0) //foo檔案使用預設的umask屏蔽位
printf("creat error for foo\n");
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
if (creat("bar", RWRWRW) < 0) //bar檔案使用上面umask使用的屏蔽位
printf("creat error for bar\n");
exit(0);
}
- 運作結果
.
- 檢視一下目前使用者的umask屏蔽位,可以看到程式的umask函數并不會影響到終端的umask