_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

另请参阅

文件处理
低级别 I/O
_chmod_wchmod
_creat_wcreat
_mkdir_wmkdir
_open_wopen
_umask