Изменить права доступа для файла
#include <sys/types.h>#include <sys/stat.h>int fchmod( int fd,mode_t mode );
libc
Функция fchmod() изменяет права доступа для файла, на который ссылается дескриптор fd, в режим, определяемый в mode.
Если эффективный идентификатор пользователя вызывающего процесса равен владельцу файла или вызывающий процесс имеет соответствующие привилегии (например, суперпользователя), fchmod() устанавливает S_ISUID
, S_ISGID
и биты прав доступа, определенные в заголовочном файле <sys/stat.h>
, из соответствующих битов аргумента mode. Эти биты определяют права доступа для связанных с файлом пользователя, группы и всех остальных.
Для обычного файла, если вызывающий процесс не имеет соответствующих прав доступа и идентификатор группы не совпадает с эффективным идентификатором группы, бит S_ISGID
(устанавливаемый идентификатор группы при выполнении) в режиме файла сбрасывается при успешном завершении fchmod().
Изменение прав доступа не имеет никакого эффекта для файлового дескриптора файла, который уже открыт.
Если функция fchmod() успешно завершена, поле файла st_ctime помечается для обновления.
/** Change the permissions of a list of files* to be read/write by the owner only*/#include <stdio.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>int main( int argc, char **argv ){int i;int ecode = 0;int fd;for ( i = 1; i < argc; i++ ){if ( ( fd = open( argv[i], O_RDONLY ) ) == -1 ){perror( argv[i] );ecode++;} elseif ( fchmod( fd, S_IRUSR | S_IWUSR ) == -1 ){perror( argv[i] );ecode++;}close( fd );}return (ecode);}
POSIX 1003.1
struct stat, chmod(), chown(), errno, fchown(), fstat(), open(), stat()
Предыдущий раздел: Описание API системной библиотеки