| CHOWN(2) | System Calls Manual | CHOWN(2) | 
chown, lchown,
  fchown, fchownat —
#include <unistd.h>
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);
#include
  <fcntl.h>
int
  
  fchownat(int
    fd, const char
    *path, uid_t owner,
    gid_t group,
    int flag);
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)).
fchownat() works the same way as
    chown() (or lchown() if
    AT_SYMLINK_NOFOLLOW is set in
    flag) except if path is
    relative. In that case, it is looked up from a directory whose file
    descriptor was passed as fd. Search permission is
    required on this directory. fd can be set to
    AT_FDCWD in order to specify the current
  directory.
One of the owner or group id's may be left unchanged by specifying it as (uid_t)-1 or (gid_t)-1 respectively.
chown(), lchown(),
  fchown(), and fchownat()
  functions return the value 0 if successful; otherwise the
  value -1 is returned and the global variable
  errno is set to indicate the error.
chown(), lchown() and
  fchownat() will fail and the file will be unchanged
  if:
EACCES]EFAULT]EIO]ELOOP]ENAMETOOLONG]NAME_MAX}
      characters, or an entire path name exceeded
      {PATH_MAX} characters.ENOENT]ENOTDIR]EPERM]EROFS]In addition, fchownat() will fail if:
EBADF]AT_FDCWD nor a
      valid file descriptor open for reading or searching.ENOTDIR]fchown() will fail if:
chown() function deviates from the semantics defined
  in IEEE Std 1003.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.
  fchownat() conforms to IEEE Std
  1003.1-2008 (“POSIX.1”).
To retain conformance to these standards, compatibility interfaces are provided by the POSIX Compatibility Library (libposix, -lposix) as follows:
chown() function conforms to
      IEEE Std 1003.1-1990 (“POSIX.1”) and
      X/Open Portability Guide Issue 4, Version 2
      (“XPG4.2”).lchown() and fchown()
      functions conform to X/Open Portability Guide
      Issue 4, Version 2 (“XPG4.2”).chown() function call appeared in
  Version 1 AT&T UNIX. 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
    NetBSD 1.3.
| September 1, 2019 | NetBSD 9.3 |