Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2)

chown(2)

chmod(2)

NAME

chmod, fchmod − change mode of file

SYNTAX

chmod(path, mode)
char *path;
int mode;

fchmod(fd, mode)
int fd, mode;

DESCRIPTION

The file whose name is given by path or referenced by the descriptor fd has its mode changed to mode. Modes are constructed by or’ing together some combination of the following:

04000  set user ID on execution
02000  set group ID on execution
01000  save text image after execution
00400  read by owner
00200  write by owner
00100  execute (search on directory) by owner
00070  read, write, execute (search) by group
00007  read, write, execute (search) by others

If an executable file is set up for sharing (this is the default) then mode 1000 prevents the system from abandoning the swap-space image of the program-text portion of the file when its last user terminates.  Ability to set this bit is restricted to the super-user. 

If the mode ISTVX (the ‘sticky bit’) is set on a directory, an unprivileged user may not delete or rename files of other users in that directory.  For mor details of the properties of the sticky bit, see sticky()

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

ENVIRONMENT

Differs from the System V definition in that the mode bit 02000 (set group id on execution) is not cleared if the effective user ID of the process is not superuser or the effective group ID of the process does not match the group ID of the file.  Also, ELOOP is a possible error condition. 

DIAGNOSTICS

The chmod system call will fail and the file mode will be unchanged if:

[EINVAL]
The pathname contains a character with the high-order bit set.

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

[ENAMETOOLONG]
A component of a pathname exceeded 255 characters, or an entire pathname exceeded 1023 characters.

[ENOENT]
The named file does not exist.

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

[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]
The path points outside the process’s allocated address space. 

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

[ELOOP]
Too many symbolic links were encountered in translating the pathname.

[ESTALE]
The file handle given in the argument is invalid.  The file referred to by that file handle no longer exists or has been revoked.

The fchmod system call will fail if:

[EBADF]
The descriptor is not valid.

[EINVAL]
The fd refers to a socket, not to a file. 

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

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

[ETIMEDOUT]
A "connect" request or remote file operation failed because the connected party did not properly respond after a period of time which is dependent on the communications protocol.

SEE ALSO

open(2), chown(2)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026