Проверить наличие прав доступа к файлу или директории
#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 системной библиотеки