НАЗВАНИЕ¶
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 бит.
СМОТРИ
ТАКЖЕ¶
open(2),
chown(2),
stat(2)
ПЕРЕВОД¶
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999,
Виктор
Вислобоков
<corochoone@perm.ru> 2003