Share via


_umask_s

設定預設檔案權限遮罩。 版本 _umask 具有 CRT 中的安全性功能中所述 的安全性增強功能。

語法

errno_t _umask_s(
   int mode,
   int* pOldMode
);

參數

mode
預設權限設定。

pOldMode
權限設定的先前值。

傳回值

如果未 mode 指定有效的模式或指標為 NULLpOldMode 則傳回錯誤碼。

錯誤條件

mode pOldMode 傳回值 pOldMode 的內容。
任意 NULL EINVAL 未修改
無效的模式 任意 EINVAL 未修改

如果發生上述其中一個條件,則會叫用不正確參數處理常式,如參數驗證 中所述 。 若允許繼續執行,_umask_s 會傳回 EINVAL,且 errno 設為 EINVAL

備註

函式會將 _umask_s 目前進程的檔案許可權遮罩設定為 所 mode 指定的模式。 檔案權限遮罩會修改 _creat_open_sopen 所建立之新檔案的權限設定。 如果遮罩中的位元為 1,則會將檔案的要求權限值中的對應位元設定為 0 (不允許)。 如果遮罩中的位元為 0,對應的位元會保持不變。 在檔案第一次關閉之前,不會設定新檔案的許可權設定。

整數運算式 mode 包含下列一個或兩個資訊清單常數,定義于 中 SYS\STAT.H

mode 描述
_S_IWRITE 允許寫入。
_S_IREAD 允許讀取。
_S_IREAD | _S_IWRITE 允許讀取和寫入。

當兩個常數都得到時,它們會與位 OR 運算子聯結 ( | 。 如果自 mode 變數為 _S_IREAD ,則不允許讀取 (檔案是唯寫的)。 如果自 mode 變數為 _S_IWRITE ,則不允許寫入 (檔案是唯讀的)。 比方說,如果遮罩中設定了寫入位元,任何新的檔案將會是唯讀。 在 MS-DOS 和 Windows 作業系統中,所有檔案都是可讀取的;無法授與唯寫許可權。 因此,使用 _umask_s 設定讀取位元對於檔案的模式沒有作用。

如果 mode 不是其中一個資訊清單常數的組合,或併入一組替代的常數,函式會忽略它們。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更它,請參閱 CRT 中的全域狀態。

需求

函式 必要的標頭
_umask_s <io.h>和 和 <sys/stat.h><sys/types.h>

如需相容性詳細資訊,請參閱相容性

範例

// crt_umask_s.c
/* This program uses _umask_s to set
* the file-permission mask so that all future
* files will be created as read-only files.
* It also displays the old mask.
*/

#include <sys/stat.h>
#include <sys/types.h>
#include <io.h>
#include <stdio.h>

int main( void )
{
   int oldmask, err;

   /* Create read-only files: */
   err = _umask_s( _S_IWRITE, &oldmask );
   if (err)
   {
      printf("Error setting the umask.\n");
      exit(1);
   }
   printf( "Oldmask = 0x%.4x\n", oldmask );
}
Oldmask = 0x0000

另請參閱

檔案處理
低階 I/O
_chmod, _wchmod
_creat, _wcreat
_mkdir, _wmkdir
_open, _wopen
_umask