CHOWN(2)            Linux Programmer's Manual            CHOWN(2)

       chown, fchown, lchown - change ownership of a file

       #include <sys/types.h>
       #include <unistd.h>

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

       The  owner  of  the  file  specified  by  path or by fd is
       changed.  Only the super-user may change the  owner  of  a
       file.   The  owner  of  a file may change the group of the
       file to any group of which that owner is  a  member.   The
       super-user may change the group arbitrarily.

       If  the owner or group is specified as -1, then that ID is
       not changed.

       When the owner or group of an executable file are  changed
       by a non-super-user, the S_ISUID and S_ISGID mode bits are
       cleared. POSIX does not specify whether this  also  should
       happen  when  root  does  the  chown;  the Linux behaviour
       depends on the kernel version.  In case  of  a  non-group-
       executable  file  (with clear S_IXGRP bit) the S_ISGID bit
       indicates mandatory locking,  and  is  not  cleared  by  a

       On  success,  zero is returned.  On error, -1 is returned,
       and errno is set appropriately.

       Depending  on  the  file  system,  other  errors  can   be
       returned.   The  more  general errors for chown are listed

       EPERM   The effective UID does not match the owner of  the
               file,  and is not zero; or the owner or group were
               specified incorrectly.

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

       EFAULT  path points outside your accessible address space.

               path is too long.

       ENOENT  The file does not exist.

       ENOMEM  Insufficient kernel memory was available.

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

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

       ELOOP   Too  many  symbolic  links  were  encountered   in
               resolving path.

       The general errors for fchown are listed below:

       EBADF   The descriptor is not valid.

       ENOENT  See above.

       EPERM   See above.

       EROFS   See above.

       EIO     A low-level I/O error occurred while modifying the

       In versions of Linux prior to 2.1.81  (and  distinct  from
       2.1.46), chown did not follow symbolic links.  Since Linux
       2.1.81, chown does follow symbolic links, and there  is  a
       new  system  call  lchown  that  does  not follow symbolic
       links.  Since Linux 2.1.86, this new call  (that  has  the
       same  semantics as the old chown) has got the same syscall
       number, and chown got the newly introduced number.

       The prototype for fchown is only available if __USE_BSD is

       The chown call conforms to SVr4, SVID, POSIX, X/OPEN.  The
       4.4BSD version can only be used by the superuser (that is,
       ordinary  users  cannot  give away files).  SVr4 documents
       EINVAL, EINTR,  ENOLINK  and  EMULTIHOP  returns,  but  no
       ENOMEM.   POSIX.1  does not document ENOMEM or ELOOP error

       The fchown call conforms to 4.4BSD and SVr4.   SVr4  docu-
       ments  additional  EINVAL,  EIO,  EINTR, and ENOLINK error

       The chown() semantics are  deliberately  violated  on  NFS
       file  systems  which  have UID mapping enabled.  Addition-
       ally, the semantics of all system calls which  access  the
       file  contents  are  violated,  because  chown() may cause
       immediate access revocation on already open files.  Client
       side  caching  may  lead to a delay between the time where
       ownership have been changed to allow access for a user and
       the  time  where  the file can actually be accessed by the
       user on other clients.

       chmod(2), flock(2)

Linux 2.1.81               May 18, 1997                         1