CHMOD(2)

NAME
chmod - change mode of file

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t mode)

DESCRIPTION
The file whose name is given by path has its mode changed to mode. Modes are constructed by or'ing together some combination of the following, defined in <sys/stat.h>:

    S_ISUID	04000	set user ID on execution
    S_ISGID	02000	set group ID on execution
    S_ISVTX	01000	`sticky bit' (see below)
    S_IRWXU	00700	read, write, execute by owner
    S_IRUSR	00400	read by owner
    S_IWUSR	00200	write by owner
    S_IXUSR	00100	execute (search on directory) by owner
    S_IRWXG	00070	read, write, execute by group
    S_IRGRP	00040	read by group
    S_IWGRP	00020	write by group
    S_IXGRP	00010	execute (search on directory) by group
    S_IRWXO	00007	read, write, execute by others
    S_IROTH	00004	read by others
    S_IWOTH	00002	write by others
    S_IXOTH	00001	execute (search on directory) by others

If mode ISVTX (the `sticky bit') is set on a directory, an unprivileged user may not delete or rename files of other users in that directory. (Minix-vmd)

Only the owner of a file (or the super-user) may change the mode.

Writing or changing the owner of a file turns off the set-user-id and set-group-id bits unless the user is the super-user. This makes the system somewhat more secure by protecting set-user-id (set-group-id) files from remaining set-user-id (set-group-id) if they are modified, at the expense of a degree of compatibility.

RETURN VALUE
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.

ERRORS
Chmod will fail and the file mode will be unchanged if:

[ENOTDIR]
    A component of the path prefix is not a directory.

[ENAMETOOLONG]
    The path name exceeds PATH_MAX characters.

[ENOENT]
    The named file does not exist.

[EACCES]
    Search permission is denied for a component of the path prefix.

[ELOOP]
    Too many symbolic links were encountered in translating the pathname. (Minix-vmd)

[EPERM]
    The effective user ID does not match the owner of the file and the effective user ID is not the super-user.

[EROFS]
    The named file resides on a read-only file system.

[EFAULT]
    Path points outside the process's allocated address space.

[EIO]
    An I/O error occurred while reading from or writing to the file system.

SEE ALSO
chmod(1), open(2), chown(2), stat(2).

NOTES
The sticky bit was historically used to lock important executables into memory.