НАЗВА
chmod, fchmod - змінює права доступу до файлу
СКЛАДОВІ
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char * path , mode_t mode );
int fchmod(int fildes , mode_t mode );
ОПИС
Змінює права доступу до файлу поданому в path або вказаному в fildes . Права визначаються за допомогою логічних операцій і/або виходячи з наступного:
S_ISUID |
04000 встановити ID користувача при виконанні | |
S_ISGID |
02000 встановити ID групи при виконанні | |
S_ISVTX |
01000 sticky bit | |
S_IRUSR (S_IREAD) |
00400 читання здійснює власник | |
S_IWUSR (S_IWRITE) |
00200 запис здійснює власник | |
S_IXUSR (S_IEXEC) |
00100 виконання/пошук здійснює власник | |
S_IRGRP |
00040 читання здійснює група | |
S_IWGRP |
00020 запис здійснює група | |
S_IXGRP |
00010 виконання/пошук здійснює група | |
S_IROTH |
00004 читання здійснюють інші | |
S_IWOTH |
00002 запис здійснюють інші | |
S_IXOTH |
00001 виконання/пошук здійснюють інші | Ефективний UID процесу мусить бути нуль, або відповідати власнику файлу. Якщо ефективний UID процесу не нуль і зазначена для файлу група не відповідає ефективному ID-групи процесу, або якимсь допоміжним ID-груп , то біт S_ISGID буде переставлено в положення виключено , тому процес буде завершений і повернута помилка. В залежності від файлової системи, при записі файлу, біт виконання в установках для ID-користувача та ID-групи може бути переключений в положення виключено. В деяких файлових системах лише привілейований користувач може встановити sticky bit, який має спеціальне значення. Про sticky-біт, про біти установок ID-користувача та ID-групи, для директорій, див. **stat** (2). В NFS файлових системах, обмеження прав доступу, зразу ж, вплине на вже відкриті файли, тому що контроль доступу проводиться на сервері, а відкриті файли обслуговуються клієнтом. Розширення прав доступу може затримувати інших клієнтів, які дозволяють кешування атрибутів.
ПОВЕРНЕНЕ ЗНАЧЕННЯ
При вдалому завершенні повертає нуль. При помилковому повертає -1 , та відповідно виставляє errno .
ПОМИЛКИ
В залежності від файлової системи, можуть бути повернені різні помилки. Більшість загальних помилок для chmod є подано нижче:
**EPERM** | Ефективний UID не відповідає власникові файлу, і не нуль. |
**EROFS** | Поданий файл знаходиться на файловій системі з якої можна тільки читати. |
**EFAULT** | _path_ (шлях) вказує поза межі доступного вам адресного простору. |
**ENAMETOOLONG** | _path_ (шлях) дуже довгий. |
**ENOENT** | Файл не існує. |
**ENOMEM** | Ядру не достатньо доступної пам'яті. |
**ENOTDIR** | Складова шляху path не є директорією. |
**EACCES** | Не достатньо прав для пошуку в складових шляху path. |
**ELOOP** | Дуже багато символічних посилань, що замикають в коло шлях _path_ . |
**EIO** | Сталася помилка вводу/виводу. |
Загальні помилки для fchmod подано нижче:
EBADF |
Дескриптор файлу fildes не вірний. |
EROFS |
Дивись вище. |
EPERM |
Дивись вище. |
EIO |
Дивись вище. |
ВІДПОВІДНІСТЬ
Виклик chmod сумісний з SVr4, SVID, POSIX, X/OPEN, 4.4BSD. В SVr4 документовано повернення значень EINTR, ENOLINK і EMULTIHOP, але не має ENOMEM. POSIX.1 не документовано коди помилок EFAULT, ENOMEM і ELOOP, а також макроси S_IREAD, S_IWRITE і S_IEXEC. Виклик fchmod сумісний з 4.4BSD і SVr4. В SVr4 додатково документовано коди помилок EINTR і ENOLINK. POSIX вимагає функцію fchmod якщо в списку оголошено або _POSIX_MAPPED_FILES або _POSIX_SHARED_MEMORY_OBJECTS , і додатково документовано коди помилок ENOSYS і EINVAL , але не документовано EIO.
В POSIXД і X/OPEN не документовано біт sticky.