April 19, 1994 CHOWN 2

### NAME

chown, lchown, fchown - change owner and group of a file

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```int` chown(```const char *path``, uid_t owner``, gid_t group`)
```int` lchown(```const char *path``, uid_t owner``, gid_t group`)
```int` fchown(```int fd``, uid_t owner``, gid_t group`)

### DESCRIPTION

The owner ID and group ID of the file 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 super-user.

When called to change the owner of a file, chown(``), lchown(``) and fchown(``) clear the set-user-id ``(`S_ISUID`) bit on the file. When a called to change the group of a file, chown(``), lchown(``) and fchown(``) clear the set-group-id ``(`S_ISGID`) bit on the file. These actions are taken to prevent accidental or mischievous creation of set-user-id and set-group-id programs.

lchown(``) is like chown(``) except in the case where the named file is a symbolic link, in which case lchown(``) changes the owner and group of the link, while chown(``) changes the owner and group of the file the link references.

fchown(``) is particularly useful when used in conjunction with the file locking primitives (see flock(2)).

One of the owner or group id's may be left unchanged by specifying it as (uid_t)-1 or (gid_t)-1 respectively.

### 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(``) and lchown(``) will fail and the file 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 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.

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

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

### SEE ALSO

chgrp(1), chmod(2), flock(2), symlink(7), chown(8)

### STANDARDS

The chown(``) function deviates from the semantics defined in ISO/IEC 9945-1:1990 (``POSIX.1'') , which specifies that, unless the caller is the super-user, both the set-user-id and set-group-id bits on a file shall be cleared, regardless of the file attribute changed. The lchown(``) and fchown(``) functions, as defined by X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') , provide the same semantics.

To retain conformance to these standards, compatibility interfaces are provided by the POSIX Compatibility Library (libposix, -lposix) as follows:

- The chown(``) function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'') and X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') .
- The lchown(``) and fchown(``) functions conform to X/Open Portability Guide Issue 4, Version 2 (``XPG4.2'') .

### HISTORY

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 call appeared in NetBSD1.3.