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.