Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
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 mem-
       ber.  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-su-
       per-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 chown.

       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 below:

       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.

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

       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	_BSD_SOURCE is defined
       (either explicitly, or implicitly, by  not  defining  _POSIX_SOURCE  or
       compiling with the -ansi	flag).

       The  chown call conforms	to SVr4, SVID, POSIX, X/OPEN.  The 4.4BSD ver-
       sion 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  er-
       ror conditions.

       The fchown call conforms	to 4.4BSD and SVr4.  SVr4 documents additional
       EINVAL, EIO, EINTR, and ENOLINK error conditions.

       The chown() semantics are deliberately violated	on  NFS	 file  systems
       which  have  UID	 mapping  enabled.  Additionally, 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	owner-
       ship  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			  1997-05-18			      CHOWN(2)


Want to link to this manual page? Use this URL:

home | help