_umask_s

Sets the default file-permission mask. A version of _umask with security enhancements as described in Security Enhancements in the CRT.

errno_t _umask_s(
   int mode,
   int * pOldMode
);

Parameters

  • [in] mode
    Default permission setting.

  • [out] oldMode
    The previous value of the permission setting.

Return Value

Returns an error code if Mode does not specify a valid mode or the pOldMode pointer is NULL.

Error Conditions

mode

pOldMode

Return Value

Contents of oldMode

any

NULL

EINVAL

not modified

invalid mode

any

EINVAL

not modified

If one of the above conditions occurs, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, _umask_s returns EINVAL and sets errno to EINVAL.

Remarks

The _umask_s function sets the file-permission mask of the current process to the mode specified by mode*.* The file-permission mask modifies the permission setting of new files created by _creat, _open, or _sopen. If a bit in the mask is 1, the corresponding bit in the file's requested permission value is set to 0 (disallowed). If a bit in the mask is 0, the corresponding bit is left unchanged. The permission setting for a new file is not set until the file is closed for the first time.

The integer expression pmode contains one or both of the following manifest constants, defined in SYS\STAT.H:

  • _S_IWRITE
    Writing permitted.

  • _S_IREAD
    Reading permitted.

  • _S_IREAD | _S_IWRITE
    Reading and writing permitted.

When both constants are given, they are joined with the bitwise-OR operator ( | ). If the mode argument is _S_IREAD, reading is not allowed (the file is write-only). If the mode argument is _S_IWRITE, writing is not allowed (the file is read-only). For example, if the write bit is set in the mask, any new files will be read-only. Note that with MS-DOS and the Windows operating systems, all files are readable; it is not possible to give write-only permission. Therefore, setting the read bit with _umask_s has no effect on the file's modes.

If pmode is not a combination of one of the manifest constants or incorporates an alternate set of constants, the function will simply ignore those.

Requirements

Routine

Required header

_umask_s

<io.h> and <sys/stat.h> and <sys/types.h>

For additional compatibility information, see Compatibility in the Introduction.

Example

// 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

.NET Framework Equivalent

System::IO::File::SetAttributes

See Also

Reference

File Handling

Low-Level I/O

_chmod, _wchmod

_creat, _wcreat

_mkdir, _wmkdir

_open, _wopen

_umask