110
Изменить владельца может только нынешний владелец файла или
пользователь, "имеющий соответствующие привилегии" (см. выше
раздел "Основные понятия и идеи стандарта POSIX"); некоторые
реализации предоставляют подобное право только привилегированным
пользователям. Обычно приходится изменять владельца и/или группу
после переноса файлов с другого компьютера с иным соответствием
числовых идентификаторов и имен.
Опции -R, -H и -L имеют в целом тот же смысл, что и для утилиты
ls (см. выше): первая предписывает рекурсивный обход встретившихся
подкаталогов, две другие - выборочное или полное раскрытие
символьных ссылок, указывающих на каталоги. Опция -P означает, что
изменения относятся к самим символьным ссылкам.
Если при использовании функций chown() и fchown() меняется
лишь владелец, то аргумент group задается равным (gid_t) (-1); при
смене только группы идентификатор владельца следует задать как
(uid_t) (-1).
Задавая аргумент изменение_режима служебной программы
chmod владельца файла обозначают буквой u, владеющую группу -
буквой g, прочих пользователей - o. Добавлению прав соответствует
знак +, их удаление помечается знаком -. Знак = обозначает буквальное
задание прав (для указанной категории пользователей устанавливается
указанный режим доступа). После букв, определяющих категорию
пользователей, и знака операции следуют сами добавляемые
(удаляемые, устанавливаемые) режимы доступа - обычно r, w и/или x;
можно указать несколько подобных связок, разделяя их запятыми (без
пробелов).
Пусть, например, все могут читать и изменять файл myfile. Чтобы
отнять право на запись у владеющей группы и прочих пользователей и
одновременно добавить себе право на выполнение, владельцу следует
воспользоваться командой, показанной в листинге 4.26.
chmod go-w,u+x myfile
Листинг 4.26. Пример использования служебной программы
chmod.
Как указывалось выше, для удобства программирования
аналогичных действий на языке C в заголовочном файле <sys/stat.h>
определены константы, соответствующие битам режима файлов.
Например, S_IRUSR соответствует праву на чтение для владельца,
S_IRWXG охватывает все три бита режима доступа для владеющей
группы и т.п. С помощью побитных операций с текущим режимом
файла и этими константами можно сформировать требуемое значение
аргумента mode функции chmod() (см. листинг 4.27).
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>