Format
#include <io.h> #include <sys\stat.h> int chmod(char *pathname, int pmode);
Language Level: XPG4, Extension
chmod changes the permission setting of the file specified by pathname.
The permission setting controls access to the file for reading or
writing. You can use chmod only if the file is closed.
The pmode expression contains one or both of the constants S_IWRITE and S_IREAD, defined in <sys\stat.h>. The meanings of the values of pmode are:
| Value | Meaning |
| S_IREAD | Reading permitted |
| S_IWRITE | Writing permitted |
| S_IREAD | S_IWRITE | Reading and writing permitted. |
If you do not give permission to write to the file, chmod makes the file read-only. All files are readable; you cannot give write-only permission. Thus, the modes S_IWRITE and S_IREAD | S_IWRITE set the same permission.
Specifying a pmode of S_IREAD is similar to making a file read-only with the ATTRIB system command.
Note: In earlier releases of the C/C++ run-time library, chmod began with an underscore (_chmod). Because it is defined by the X/Open standard, the underscore has been removed. For compatibility, IBM C and C++ Compilers will map _chmod to chmod for you.
Return Value
chmod returns the value 0 if it successfully changes the
permission setting. A return value of -1 shows an error; chmod
sets errno to one of the following values:
| Value | Meaning |
| ENOENT | The system cannot find the file or the path that you specified, or the file name was incorrect. |
| EOS2ERR | The call to the operating system was not successful. |
| EINVAL | The mode specified was not valid. |
Example
This example opens the file chmod.dat for writing after
checking the file to see if writing is permissible. It then
writes from the buffer to the opened file. This program takes
file names passed as arguments and sets each to read-only.
#include <sys\stat.h> #include <io.h> #include <stdio.h> #include <stdlib.h>
int main(void)
{
if (-1 == access("chmod.dat", 00)) /* Check if file exists. */
{
printf("\nCreating chmod.dat.\n");
system("echo Sample Program < chmod.dat");
printf("chmod chmod.dat to be readonly.\n");
if (-1 == chmod("chmod.dat", S_IREAD))
perror("Chmod failed");
if (-1 == access("chmod.dat", 02))
printf("File chmod.dat is now readonly.\n\n");
printf("Run this program again to erase chmod.dat.\n\n");
}
else {
printf("\nFile chmod.dat exist.\n");
printf("chmod chmod.dat to become writable.\n");
if (-1 == chmod("chmod.dat", S_IWRITE))
perror("Chmod failed");
system("erase chmod.dat");
printf("File chmod.dat removed.\n\n");
}
return 0;
/*******************************************************************
If chmod.dat does not exist, the output should be:
Creating chmod.dat.
chmod chmod.dat to be readonly.
File chmod.dat is now readonly.
Run this program again to erase chmod.dat. *******************************************************************/ }
![]()
access -- Determine Access Mode
_sopen -- Open Shared File
umask -- Set File Mask of Current
Process
<sys\stat.h>
<io.h>