设置默认的文件权限掩码。 这是 _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