access - проверка прав пользователя для доступа к файлу
НАЗВАНИЕaccess - проверка прав пользователя для доступа к файлу
СИНТАКСИС
#include
int access(const char *pathname, int mode);
ОПИСАНИЕ
access проверяет, имеет ли процесс права на чтение или
запись, или просто проверяет, существует ли файл (или
другой объект файловой системы), путь к которому задается
переменной
символьной ссылкой, то проверяются права доступа к файлу,
на который она указывает. mode - это маска, состоящая из
одного или более флагов R_OK, W_OK, X_OK и F_OK. R_OK,
W_OK и X_OK используются для проверки, существует ли файл
и можно ли его читать, записывать в него или выполнять,
соответственно. F_OK просто проверяет существование
файла. Результаты проверки зависят от прав доступа к
каталогам, находящимся по пути к файлу, заданному
параметром
файлам, на которые указывают символьные ссылки. Проверка
осуществляется, используя
идентификаторы пользователя и группы. Фактические
идентификаторы будут использоваться при действительной
попытке выполнения операции. Это дает программам setuid
простой способ проверить права доступа реального
пользователя. Проверяются только биты доступа (без
проверки типа файла или содержимого). Таким образом, если
имеется возможность записи в каталог, это, вероятно,
означает то, что в нем можно создавать файлы, а не то,что
в этот каталог можно писать так же, как в обычный файл.
Например, файл из DOS может оказаться "исполняемым", но
системный вызов execve(2) завершится неудачно. Если
процесс имеет соответствующие привилегии, то реализация
может выдать успех для X_OK даже если не установлен ни
один из битов, разрешающих исполнение файлов.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном вызове функции (даны все требуемые
разрешения), возвращается нулевое значение. При ошибке
(по крайней мере один бит в запросе mode неудовлетворен
или произошла другая ошибка), возвращается -1, а
переменной errno присваивается соответствующее значение.
КОДЫ ОШИБОК
EACCES Запрошенный тип доступа не удовлетворен или один из
каталогов в pathname не позволяет произвести поиск.
EROFS Были запрошены права доступа на запись для файла,
находящегося на файловой системе, смонтированной
только для чтения.
EFAULT pathname указывает за пределы доступного адресного
пространства.
EINVAL mode задан неверно.
ENAMETOOLONG
Слишком длинный путь - pathname
ENOENT Компонент пути pathname не существует или является
символьной ссылкой, которая указывает на
несуществующий файл или каталог.
ENOTDIR
Компонент пути, использованный как каталог в path-
name фактически не является каталогом.
ENOMEM Недостаточно памяти.
ELOOP
ссылкой, то есть при подстановке возникает ссылка
на неё саму.
EIO Ошибка ввода-вывода.
ОГРАНИЧЕНИЯ
access возвращает ошибку, если один из запрошенных типов
доступа не будет удовлетворен, даже если другие типы
прошли бы успешно.
access может работать неверно на файловых системах NFS со
включенным преобразованием UID, потому что это
преобразование происходит на сервере и спрятано от
клиента, который пытается проверить права.
Использование access для проверки (например, можно ли
пользователю открыть файл перед выполнением open(2))
создает бреши в защите, потому что пользователь может в
короткий промежуток между проверкой и открытием файла
как-то его изменить.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVID, AT&T, POSIX, X/OPEN, BSD 4.3