НАИМЕНОВАНИЕ
- Provided by: manpages-ru-dev (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
Стандартная библиотека языка C (libc, -lc)
#include <sys/stat.h>
int chmod(const char *path, mode_t mode); int fchmod(int fd, mode_t mode);
#include <fcntl.h> /* определения констант AT_* */ #include <sys/stat.h>
int fchmodat(int dirfd, const char *path, mode_t mode, int flags);
fchmod():
Начиная с glibc 2.24:
_POSIX_C_SOURCE >= 199309L
glibc 2.19 до glibc 2.23
_POSIX_C_SOURCE
glibc 2.16 до glibc 2.19:
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 до glibc 2.16:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
|| _POSIX_C_SOURCE >= 200809L
glibc 2.11 и ранее:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
fchmodat():
Начиная с glibc 2.10:
_POSIX_C_SOURCE >= 200809L
До glibc 2.10:
_ATFILE_SOURCE
Системные вызовы chmod() и fchmod() изменяют биты режима файла (режим файла состоит из бит прав доступа к файлу плюс биты set-user-ID, set-group-ID и бит закрепления) Данные системные вызовы отличаются только способом указания файла:
Новый режим файла указывается в mode и представляет собой битовую маску, создаваемую побитовым сложением нуля или более следующих констант:
Эффективный идентификатор пользователя (UID) вызывающего процесса должен совпадать с UID владельца файла или процесс должен быть привилегированным (Linux: у него должен быть мандат CAP_FOWNER).
Если вызывающий процесс не является привилегированным (Linux: не имеет мандата CAP_FSETID), а группа-владелец файла не совпадает с эффективным групповым ID процесса или одним из его дополнительных групповых идентификаторов, то бит S_ISGID будет сброшен, но ошибки при этом не возникнет.
В зависимости от файловой системы в целях безопасности биты выполнения set-user-ID и set-group-ID могут сбрасываться при записи в файл (в Linux это происходит, если записывающий процесс не имеет мандата CAP_FSETID). В некоторых файловых системах только суперпользователь может устанавливать закрепляющий бит, который может иметь специальное назначение. Значения закрепляющего бита, set-user-ID и set-group-ID для каталогов смотрите в inode(7).
В файловых системах NFS ограничивающие права сразу начинают действовать даже уже на открытые файлы, так как контроль доступа выполняется сервером, но открытые файлы находятся в ведении клиента. Распространение прав может откладываться для других клиентов, если у них установлен атрибут кэширования.
Системный вызов fchmodat() работает также как системный вызов chmod(), за исключением случаев, описанных здесь.
If path is relative, then it is interpreted relative to the directory referred to by the file descriptor dirfd (rather than relative to the current working directory of the calling process, as is done by chmod() for a relative pathname).
If path is relative and dirfd is the special value AT_FDCWD, then path is interpreted relative to the current working directory of the calling process (like chmod()).
If path is absolute, then dirfd is ignored.
flags can either be 0, or include the following flags:
Смотрите в openat(2) объяснение необходимости fchmodat().
При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
В зависимости от файловой системы могут также возвращаться другие ошибки, перечисленные далее.
Наиболее распространённые ошибки chmod() перечислены далее:
В этой странице описана обёрточная функция fchmodat() библиотеки GNU C, реализующая POSIX-интерфейс. Данный интерфейс отличается от лежащего в основе системного вызова Linux тем, что имеет аргумент flags.
On older kernels where fchmodat() is unavailable, the glibc wrapper function falls back to the use of chmod(). When path is a relative pathname, glibc constructs a pathname based on the symbolic link in /proc/self/fd that corresponds to the dirfd argument.
POSIX.1-2024.
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.