Документация по LinuxLinuxDoc.Ru 🔍

chown, fchown, lchown - функции, изменяющие владельца файла

НАЗВАНИЕ
chown, fchown, lchown - функции, изменяющие владельца
файла

СИНТАКСИС
#include
#include

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() может привести к
немедленному запрету доступа к уже открытым файлам.
Кэширование на клиенте может привести к задержке между
сменой владельца и истинным моментом, когда этот
пользователь сможет обратиться к файлу на других клиентах.
Читать новости Linux в Telegram
Linux - chown, fchown, lchown - функции, изменяющие владельца файла
Мы в соцсетях ✉