_umask_s
設定預設檔案權限遮罩。 版本_umask
具有CRT中的安全性功能中所述的安全性增強功能。
語法
errno_t _umask_s(
int mode,
int* pOldMode
);
參數
mode
預設權限設定。
pOldMode
權限設定的先前值。
傳回值
如果未mode
指定有效的模式或指標為 NULL
,pOldMode
則傳回錯誤碼。
錯誤條件
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