ИМЯ
chown, fchown, lchown − изменить владельца файла
ОБЗОР
#include
<sys/types.h>
#include <unistd.h>
int
chown(const char *path, uid_t
owner, gid_t group);
int fchown(int fd, uid_t owner,
gid_t group);
int lchown(const char *path, uid_t
owner, gid_t group);
ОПИСАНИЕ
Изменяет владельца для файла, задаваемого параметрами path или fd. Только суперпользователь может изменять владельца файла. Владелец файла может изменять группу файла на любую группу, к которой он принадлежит. Суперпользователь может произвольно изменять группу.
Если параметр owner или group заданы как −1, то соответствующий идентификатор не изменяется.
Когда владелец или группа исполняемого файла изменяются не-суперпользователем, то очищаются биты S_ISUID и S_ISGID. POSIX не требует, чтобы это происходило, когда суперпользователь выполняет chown; в этом случае поведение зависит от версии ядра Linux. Если в правах доступа к файлу не установлен бит исполнения группой (S_IXGRP), то бит S_ISGID означает принудительную блокировку на этом файле и не очищается функцией chown.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха возвращается ноль. При ошибке возвращается −1, а errno устанавливается должным образом.
ОШИБКИ
В зависимости от файловой системы могут также возвращаться другие ошибки. Общий набор ошибок chown перечислен ниже:
EPERM |
Фактический UID не совпадает с владельцем файла и не равен нулю; параметры owner или group заданы неверно. | ||
EROFS |
Файл находится на файловой системе, смонтированной только для чтения. | ||
EFAULT |
path указывает за пределы доступного адресного пространства. |
ENAMETOOLONG
path слишком длинно.
ENOENT |
Файл не существует. | ||
ENOMEM |
Ядру не хватило памяти. | ||
ENOTDIR |
Компонент пути, использованный как каталог в path, в действительности таковым не является. | ||
EACCES |
Запрещен поиск в одном из каталогов, находящихся на пути к файлу. | ||
ELOOP |
При обработке path встречено слишком много символьных ссылок (возможно зацикливание по символьным ссылкам -- прим. пер.). |
Общие ошибки fchown таковы:
EBADF |
Неверный файловый дескриптор. | ||
ENOENT |
См. выше. | ||
EPERM |
См. выше. | ||
EROFS |
См. выше. | ||
EIO |
При модификации inode произошла низкоуровневая ошибка ввода-вывода. |
ЗАМЕЧАНИЯ
В версиях Linux до 2.1.81 (кроме 2.1.46), chown не следовал по символьным ссылкам. Начиная с версии Linux 2.1.81 chown следует по символьным ссылкам, и существует новый системный вызов lchown, который не следует по символьным ссылкам. Начиная с Linux 2.1.86 этот новый вызов (имеющий ту же смысл, что и старый chown), имеет тот же самый номер системного вызова, а chown получил новый номер.
Прототип fchown доступен только если определен символ _BSD_SOURCE (или явно или неявно, но задан символ _POSIX_SOURCE или компиляция осуществляется с флагом -ansi).
СООТВЕТСТВИЕ СТАНДАРТАМ
Системный вызов chown соответствует SVr4, SVID, POSIX, X/OPEN. В версии 4.4BSD его может использовать только суперпользователь (то есть обычные пользователи не могут отдавать файлы). SVr4 документирует EINVAL, EINTR, ENOLINK и EMULTIHOP, но не документирует ENOMEM. POSIX.1 не документирует ENOMEM и ELOOP.
Системный вызов fchown соответствует 4.4BSD и SVr4. SVr4 документирует дополнительные коды ошибки EINVAL, EIO, EINTR и ENOLINK.
ОГРАНИЧЕНИЯ
Логика работы chown специально нарушается на файловых системах NFS с разрешенным преобразованием UID. Вдобавок логика работы нарушается у всех системных вызовов, которые обращаются к содержимому файла, потому что chown может привести к немедленному запрету доступа к уже открытым файлам. Кэширование на клиенте может привести к задержке между сменой владельца и истинным моментом, когда этот пользователь сможет обратиться к файлу с других клиентов.
СМОТРИ ТАКЖЕ
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 1999-2000, Виктор Вислобоков <corochoone [AT] perm.ru> 2003