Syntax | #include <unistd.h> int lchown(const char *path, uid_t owner, gid_t group); |
Description | The lchown() function sets the owner and the group affiliation of the specified file. This isthe same as chown() unless the file consists of a symbolic link. In this case lchown() changes the ownership of the link file, whereas chown() changes the ownership of the file or directory to which the link refers. If chown() , lchown() or fchown() is called by a process that does not have system administrator status, the bit for setting the user and group IDs on execution, or S_ISUID and S_ISGID , is deleted [see chmod() ]. The operating system has the configuration option _POSIX_CHOWN_RESTRICTED to prevent affiliation changes for chown() , lchown() and fchown() system calls. In POSIX, _POSIX_CHOWN_RESTRICTED is active, therefore the chown() , lchown() and fchown() system calls protect the owner of a file from having the owner IDs of his/her files changed, and they restrict the group change of the file to the list of supplementary group IDs. After successful completion, chown() , lchown() and fchown() mark the ST_CTIME field of the file for update. |
Return val. | 0 | if successful. |
| -1 | if an error occurs. errno is set to indicate the error. If -1 is returned, the user ID and group ID of the file are not changed. |
Errors | lchown() will fail if:
|
| EACCES
| Search permission is denied for a component of path. |
| EINVAL
| The value of the specified user ID or group ID is not supported, e.g. if the value is less than 0, or an attempt was made to access a BS2000 file. |
| ENAMETOOLONG
|
|
| The length of the pathname exceeds {PATH_MAX} , or the length of a component of the pathname exceeds {NAME_MAX} . |
| ENOENT
| A component of the pathname does not exist, or path points to an empty string. |
| ENOTDIR
| A component of the pathname prefix is not a directory. |
| EOPNOTSUPP
| The path argument identifies a symbolic link and the implementation does not support changing the owner or the group affiliation of a symbolic link. |
| ELOOP
| Too many symbolic links were encountered in resolving path. |
| EPERM
| The effective user ID does not match the owner of the file, and the calling process does not have the appropriate access permissions. |
| EROFS
| The file is resides on a read-only file system. |
| EIO
| An I/O error occurred while reading from or writing to the file system. |
| EINTR
| A signal was caught during execution of the function. |
|
Extension
ENAMETOOLONG
|
|
| The resolution of symbolic links in the pathname leads to an interim result whose length exceeds {PATH_MAX} . (End) |
See also | chmod() , chown() , symlink() , unistd.h .
|