The owner ID and group ID of the file (or link) named by
path
or referenced by
fd
is changed as specified by the arguments
owner
and
group.
The owner of a file may change the
group
to a group of which he or she is a member, but the change
owner
capability is restricted to the superuser.
By default,
chown();
clears the set-user-ID and set-group-ID bits on the file
to prevent accidental or mischievous creation of
set-user-ID and set-group-ID programs.
This behaviour can be overridden by setting the
sysctl(8)
variable
fs.posix.setuid
to zero.
lchown();
operates similarly to how
chown();
operated on older systems, and does not follow symbolic links.
It allows the owner and group of a symbolic link to be set.
fchown();
is particularly useful when used in conjunction
with the file locking primitives (see
flock(2/)).
One of the owner or group IDs
may be left unchanged by specifying it as \-1.
RETURN VALUES
Zero is returned if the operation was successful;
\-1 is returned if an error occurs, with a more specific
error code being placed in the global variable
errno.
ERRORS
chown();
or
lchown();
will fail and the file or link will be unchanged if:
[ENOTDIR]
A component of the path prefix is not a directory.
[ENAMETOOLONG]
A component of a pathname exceeded
{NAME_MAX}
characters, or an entire path name exceeded
{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.
[EPERM]
The effective user ID is not the superuser.
[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.
fchown();
will fail if:
[EBADF]
fd
does not refer to a valid descriptor.
[EINVAL]
fd
refers to a socket, not a file.
[EPERM]
The effective user ID is not the superuser.
[EROFS]
The named file resides on a read-only file system.
[EIO]
An I/O error occurred while reading from or writing to the file system.
The
fchown();
function call appeared in
4.2BSD.
The
chown();
and
fchown();
functions were changed to follow symbolic links in
4.4BSD.
The
lchown();
function was added to
OpenBSD
due to the above.