_umask_s
设置默认的文件权限掩码。 这是 _umask
版本,具有 CRT 中的安全性功能中所述的安全性增强功能。
语法
errno_t _umask_s(
int mode,
int* pOldMode
);
参数
mode
默认权限设置。
pOldMode
权限设置的上一个值。
返回值
如果 mode
未指定有效的模式或 pOldMode
指针是 NULL
,则返回错误代码。
错误条件
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