ИМЯ¶
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
может
привести к
немедленному
запрету
доступа к
уже открытым
файлам.
Кэширование
на клиенте
может
привести к
задержке
между сменой
владельца и
истинным
моментом,
когда этот
пользователь
сможет
обратиться к
файлу с
других
клиентов.
СМОТРИ
ТАКЖЕ¶
chmod(2),
flock(2)
ПЕРЕВОД¶
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999-2000,
Виктор
Вислобоков
<corochoone@perm.ru> 2003