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