天天看點

APUE程式設計:35---檔案目錄(檔案權限屏蔽字函數:umask)一、umask函數二、示範案例

一、umask函數

#include <sys/stat.h>
mode_t umask(mode_t cmask);

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

二、示範案例

#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);
}
           
  • 運作結果
APUE程式設計:35---檔案目錄(檔案權限屏蔽字函數:umask)一、umask函數二、示範案例

.

  • 檢視一下目前使用者的umask屏蔽位,可以看到程式的umask函數并不會影響到終端的umask
APUE程式設計:35---檔案目錄(檔案權限屏蔽字函數:umask)一、umask函數二、示範案例

繼續閱讀