fchmod - change mode of a file
#include <sys/stat.h>
int fchmod(int fildes, mode_t mode);
The fchmod() function shall be equivalent to chmod() except that the file whose permissions are changed is specified by the file descriptor fildes.
[SHM] If fildes references a shared memory object, the fchmod() function need only affect the S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTH, and S_IWOTH file permission bits.
[TYM] If fildes references a typed memory object, the behavior of fchmod() is unspecified.
If fildes refers to a socket, the behavior of fchmod() is unspecified.
[XSR] If fildes refers to a STREAM (which is fattach()-ed into the file system name space) the call returns successfully, doing nothing.
Upon successful completion, fchmod() shall return 0. Otherwise, it shall return -1 and set errno to indicate the error.
The fchmod() function shall fail if:
- [EBADF]
- The fildes argument is not an open file descriptor.
- [EPERM]
- The effective user ID does not match the owner of the file and the process does not have appropriate privilege.
- [EROFS]
- The file referred to by fildes resides on a read-only file system.
The fchmod() function may fail if:
- [EINTR]
- [XSI] The fchmod() function was interrupted by a signal.
- [EINVAL]
- [XSI] The value of the mode argument is invalid.
- [EINVAL]
- The fildes argument refers to a pipe and the implementation disallows execution of fchmod() on a pipe.
Changing the Current Permissions for a File
The following example shows how to change the permissions for a file named /home/cnd/mod1 so that the owner and group have read/write/execute permissions, but the world only has read/write permissions.
#include <sys/stat.h> #include <fcntl.h>
mode_t mode; int fildes; ... fildes = open("/home/cnd/mod1", O_RDWR); fchmod(fildes, S_IRWXU | S_IRWXG | S_IROTH | S_IWOTH);
None.
None.
None.
chmod() , chown() , creat() , fcntl() , fstatvfs() , mknod() , open() , read() , stat() , write() , the Base Definitions volume of IEEE Std 1003.1-2001, <sys/stat.h>
First released in Issue 4, Version 2.
Moved from X/OPEN UNIX extension to BASE and aligned with fchmod() in the POSIX Realtime Extension. Specifically, the second paragraph of the DESCRIPTION is added and a second instance of [EINVAL] is defined in the list of optional errors.
The DESCRIPTION is updated for alignment with IEEE Std 1003.1j-2000 by stating that fchmod() behavior is unspecified for typed memory objects.