内容简介
#include <sys/types.h>%uA0#include <unistd.h>
int chown(const char *path, uid_t%uA0owner, gid_t%uA0group)%uA0
int fchown(int%uA0fd, uid_t%uA0owner, gid_t%uA0group)%uA0
int lchown(const char *path, uid_t%uA0owner, gid_t%uA0group)
描述
These system calls change the owner and group of the file specified by%uA0path%uA0or by%uA0fd. Only a privileged process (Linux: one with the%uA0CAP_CHOWNꃊpability) 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. A privileged process (Linux: with%uA0CAP_CHOWN) may change the group arbitrarily.If the%uA0owner%uA0or%uA0group%uA0is specified as -1, then that ID is not changed.
When the owner or group of an executable file are changed by a non-superuser, the S_ISUID and S_ISGID mode bits are cleared. POSIX does not specify whether this also should happen when root does the%uA0chown() 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%uA0chown().
RETURN VALUE
On success, zero is returned. On error, -1 is returned, and%uA0errno%uA0is set appropriately.ERRORS
Depending on the file system, other errors can be returned. The more general errors forchown() are listed below.标签 | 描述 |
---|---|
EACCES | Search permission is denied on a component of the path prefix. (See also%uA0path_resolution(2).) |
EFAULT | path%uA0yiibais outside your accessible address space. |
ELOOP | Too many symbolic links were encountered in resolving%uA0path. |
ENAMETOOLONG | |
%uA0 | path%uA0is too long. |
ENOENT | The file does not exist. |
ENOMEM | Insufficient kernel memory was available. |
ENOTDIR | |
%uA0 | A component of the path prefix is not a directory. |
EPERM | The calling process did not have the required permissions (see above) to change owner and/or group. |
EROFS | The named file resides on a read-only file system. |
The general errors for%uA0fchown() are listed below: | |
EBADF | The descriptor is not valid. |
EIO | A low-level I/O error occurred while modifying the inode. |
ENOENT | See above. |
EPERM | See above. |
EROFS | See above. |
NOTES
In versions of Linux prior to 2.1.81 (and distinct from 2.1.46),%uA0chown() did not follow symbolic links. Since Linux 2.1.81,%uA0chown() does follow symbolic links, and there is a new system call%uA0lchown() that does not follow symbolic links. Since Linux 2.1.86, this new call (that has the same semantics as the old%uA0chown()) has got the same syscall number, and%uA0chown() got the newly introduced number.The prototype for%uA0fchown() is only available if%uA0_BSD_SOURCE%uA0is defined.
CONFORMING TO
4.4BSD, SVr4, POSIX.1-2001.The 4.4BSD version can only be used by the superuser (that is, ordinary users cannot give away files).