access()

Проверить наличие прав доступа к файлу или директории

Прототип:

#include <unistd.h>
int access( const char *path,
int amode );

Аргументы:

path
Путь к файлу или директории, для которой требуется проверить доступ.
amode
Режим доступа на который производится проверка. Должен быть либо:
F_OK
проверка на наличие файла.

либо побитовое ИЛИ из следующих вариантов проверки прав доступа, как это определено в заголовочном файле <unistd.h>:
R_OK
проверка наличия права на чтение.
W_OK
проверка наличия права на запись.
X_OK
для директории - проверка права на поиск, для остальных - проверка права на выполнение.

Библиотека:

libc

Описание:

Функция access() проверяет, существует ли по пути path указанный файл или директория и имеются ли указанные в amode права доспупа. Однако, в отличии от других функций (например, open()), она использует реальный идентификатор пользователя и группы вместо эффективных.

Возвращаемое значение:

0
Файл или директория существует и имеет запрошенные права доступа.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EACCES
Нет прав для доступа указанных amode или один из каталогов в path не позволяет поиск.
EINVAL
Указано недопустимое значение аргумента amode.
ELOOP
Слишком много уровней символических символов или префиксов.
ENAMETOOLONG
Длина строки path превышает PATH_MAX или имя одного из компонентов пути длиннее NAME_MAX.
ENOENT
Компонент пути не существует или повреждён.
ENOSYS
Функция access() не реализована для файловой системы указанной в path.
ENOTDIR
Один из компонентов префикса пути не является директорией.
EROFS
Запрошено право на запись для файла находящегося в файловой системе, доступной только для чтения.

Примеры:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv )
{
if ( argc!= 2 )
{
fprintf( stderr, "use: readable <filename>\n" );
return (EXIT_FAILURE);
}
if ( !access( argv[1], R_OK ) )
{
printf( "ok to read %s\n", argv[1] );
return (EXIT_SUCCESS);
} else {
perror( argv[1] );
return (EXIT_FAILURE);
}
}

Классификация:

POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

chmod(), eaccess(), errno, fstat(), open(), stat()




Предыдущий раздел: Описание API системной библиотеки