НАЗВАНИЕ
chmod, fchmod − изменить права доступа к файлу
ОБЗОР
#include
<sys/types.h>
#include <sys/stat.h>
int
chmod(const char *path, mode_t
mode);
int fchmod(int fildes, mode_t
mode);
ОПИСАНИЕ
Изменяет права доступа к файлу, заданному параметром path или файловым дескриптором fildes.
Права задаются применением логической операции OR (битовое сложение -- прим. пер.) к следующим константам:
S_ISUID |
04000 установить при выполнении идентификатор пользователя (suid бит -- прим.пер.) | ||
S_ISGID |
02000 установить при выполнении идентификатор группы (sgid бит -- прим.пер.) | ||
S_ISVTX |
01000 sticky бит |
S_IRUSR (S_IREAD)
00400 владелец может читать
S_IWUSR (S_IWRITE)
00200 владелец может писать
S_IXUSR (S_IEXEC)
00100 владелец может выполнять файл или искать в каталоге
S_IRGRP |
00040 группа-владелец может читать | ||
S_IWGRP |
00020 группа-владелец может писать | ||
S_IXGRP |
00010 группа-владелец может выполнять файл или искать в каталоге | ||
S_IROTH |
00004 все остальные могут читать | ||
S_IWOTH |
00002 все остальные могут писать | ||
S_IXOTH |
00001 все остальные могут выполнять файл или искать в каталоге |
Эффективный идентификатор пользователя (UID) для вызывающего процесса должен быть нулем или совпадать с UID владельца файла.
Если эффективный UID процесса не равен нулю, а группа-владелец файла не совпадает с фактическим GID процесса или одним из его дополнительных GID’ов, то бит S_ISGID будет сброшен, но ошибки при этом не возникнет.
В зависимости от файловой системы, suid и sgid биты могут быть сброшены, когда происходит запись в файл. На некоторых файловых системах только суперпользователь может устанавливать sticky бит, который может иметь специальное значение. О значении sticky бита, а также suid и sgid битов на каталоги, см. stat(2). На файловых системах NFS отмена некоторых прав доступа немедленно повлияет на открытые файлы, потому что контроль доступа осуществляется сервером, а открытые файлы обрабатываются клиентом. Добавление новых прав доступа может произойти не сразу, если на клиенте включено кэширование атрибутов.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха возвращается ноль. При ошибке возвращается −1, а errno устанавливается должным образом.
ОШИБКИ
В зависимости от файловой системы могут также появиться другие ошибки. Общий набор ошибок для chmod таков:
EPERM |
Фактический UID не совпадает с владельцем файла и не равен нулю. | ||
EROFS |
Файл находится на файловой системе, смонтированной только для чтения. | ||
EFAULT |
path указывает за пределы доступного адресного пространства. |
ENAMETOOLONG
path слишком длинно.
ENOENT |
Файл не существует. | ||
ENOMEM |
Ядру не хватило памяти. | ||
ENOTDIR |
Компонент пути, использованный как каталог в path, в действительности таковым не является. | ||
EACCES |
Запрещен поиск в одном из каталогов, находящихся на пути к файлу. | ||
ELOOP |
При обработке path встречено слишком много символических ссылок. | ||
EIO |
Произошла ошибка ввода-вывода. |
Общий набор ошибок для fchmod таков:
EBADF |
Неверный файловый дескриптор fildes. |
|||
EROFS |
См. выше. |
|||
EPERM |
См. выше. |
|||
EIO |
См. выше. |
СООТВЕТСТВИЕ СТАНДАРТАМ
Системный вызов chmod соответствует стандартам SVr4, SVID, POSIX, X/OPEN, 4.4BSD. SVr4 документирует EINTR, ENOLINK и EMULTIHOP, но не документирует ENOMEM. POSIX.1 не документирует ни коды ошибок EFAULT, ENOMEM, ELOOP и EIO, ни макросы S_IREAD, S_IWRITE и S_IEXEC.
Системный вызов fchmod соответствует 4.4BSD и SVr4. SVr4 документирует дополнительные коды ошибок EINTR и ENOLINK. POSIX требует присутствия функции fchmod, если определены символы _POSIX_MAPPED_FILES или _POSIX_SHARED_MEMORY_OBJECTS, и документирует дополнительные коды ошибок ENOSYS и EINVAL, но не документирует EIO.
POSIX и X/OPEN не документируют sticky бит.
СМОТРИ ТАКЖЕ
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 1999, Виктор Вислобоков <corochoone [AT] perm.ru> 2003