Назва
chown, fchown, lchown - змінює власника файлу
Звід
#include <sys/types.h>
#include <unistd.h>
int chown(const char шлях , uid_t власник , gid_t група );
int fchown(int fd , uid_t власник , gid_t група );
int lchown(const char шлях , uid_t власник , gid_t група );
Опис
Змінює власника, вказаного в шляху або дескрипторі fd , файлу. Лише привілейований користувач може змінити власника файлу. Власник файлу може змінити групу для файлу, якщо він являється членом цієї групи . Привілейований користувач може змінити групу на будь-яку іншу.
Якщо власник або група є вказана як -1, то цей ID є незмінним.
Коли змінюється власника або групу файлу не привілейованим користувачем то біти режиму S_ISUID і S_ISGID будуть очищені. POSIX не згадує про поведінку у таких ситуаціях при виконанні chown привілейованим користувачем; поведінка Linux також залежить від версії ядра.У випадку файлу із відсутнім дозволом на виконання групою (із очищеним бітом S_IXGRP), біт S_ISGID вказує на обов'язкове блокування і не буде змінено chown.
Повернене значення
При вдалому завершенні повертає нуль. При помилковому повертає -1 , та відповідно виставляє errno.
Помилки
В залежності від файлової системи, можуть бути повернені різні помилки. Більшість загальних помилок для chdir наведено нижче:
EPERM : UID не відповідає власнику файлу, і не є нулем; або власник чи група були вказані невірно.
EROFS : Названий файл розміщений на файловій системі з дозволом тільки на читання.
EFAULT : шлях вказує по-за доступною ділянкою пам'яті.
ENAMETOOLONG : шлях занадто довгий.
ENOENT : Вказаного файлу не існує.
ENOMEM : Недостатньо пам'яті ядра.
ENOTDIR : Якась частина (префіксу) назви шляху не є каталогом.
EACCES : Відсутній дозвіл на пошук вказаного шляху.
ELOOP : Занадто багато символічних посилань при спробі розв'язати шлях.
Перелік загальних помилок fchown:
EBADF : Дескриптор не є дійсним.
ENOENT : Дивіться вище.
EPERM : Дивіться вище.
EROFS : Дивіться вище.
EIO : Відбулася помилка вводу/виводу низького рівня під час запису дискового інфовузла (inode).
Примітки
У версіях Linux до 2.1.81 (окрім 2.1.46), chown не слідував за символічними посиланнями. Лише починаючи з Linux 2.1.81. Також пізніше з'явився новий системний виклик, lchown, який не слідує символічм посиланням. Починаючи з Linux 2.1.86, lchown (який поділяє симантику з chown) отримав номер системного виклику chown, тоді як останній поміняв його.
Прототип для fchown лише доступний якщо _BSD_SOURCE означена (безпосередньо або непрямим способом, але без означення _POSIX_SOURCE або компілюючи з прапорцем -ansi).
Відповідність
Виклик chown узгоджується зі стандартами SVr4, SVID, POSIX, X/OPEN. Версія 4.4BSD може використовуватися лише адміністратором (тобто звичайні користувачі не можуть міняти користувачів власних файлів. У SVr4 описані повернення значень EINVAL, EINTR, ENOLINK і EMULTIHOP, але нічого не сказано про ENOMEM. У POSIX помилки ENOMEM та ELOOP також не документовано.
Виклик fchown узгоджується із 4.4BSD і SVr4. У SVr4 стандарті також присутні додаткові помилки EINVAL, EIO, EINTR і ENOLINK.
Обмеження
Семантика chown() навмисне порушена на NFS (мережевих файлових системах) що мають включеним відповідність UID (користувацьких ID). Семантика інших системних викликів, що намагаються отримати доступ до файлів, також порушені на NFS, оскільки chown() може присвести до негайного припинення доступу у випадку вже відкритих файлів. Кешування з клієнтської сторони може призвести до затримок між часом коли користувача поміняно, щоб дозволити попередньому користувачеві завершити роботу, і часом до того як інший користувач (на інших клієнтах) матиме доступ до файлу.