Книга: Программирование для Linux. Профессиональный подход
Листинг 8.1. (check-access.c) Проверка прав доступа к файлу
Листинг 8.1. (check-access.c) Проверка прав доступа к файлу
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
char* path = argv[1];
int rval;
/* Проверка существования файла. */
rval = access(path, F_OK);
if (rval == 0)
printf("%s existsn", path);
else {
if (errno == ENOENT)
printf("%s does not existn", path);
else if (errno == EACCES)
printf("%s is not accessiblen", path);
return 0;
}
/* Проверка права доступа. */
rval = access(path, R_OK);
if (rval == 0)
printf("%s is readablen", path);
else
printf("%s is not readable (access denied)n", path);
/* проверка права записи. */
rval = access(path, W_OK);
if (rval == 0)
printf("%s is writablen", path);
else if (errno == EACCES)
printf("%s is not writable (access denied)n", path);
else if (errno == EROFS)
printf("%s is not writable (read-only filesystem)n",
path);
return 0;
}
Вот как, к примеру, проверить права доступа к файлу README
, расположенному на компакт-диске:
% ./check-access /mnt/cdrom/README
/mnt/cdrom/README exists
/mnt/cdrom/README is readable
/mnt/cdrom/README is not writable (read-only filesystem)
- Правила творческой лени
- Права для выполнения резервного копирования
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Правильная стратегическая последовательность
- Ничего, кроме правды: поведение потребителей
- Заполнение справочников и каталогов
- Неисправности источника бесперебойного питания
- Практическая работа 53. Запуск Access. Работа с объектами базы данных
- Checksum
- Неисправности акустических систем
- Основные "рычаги" управления производительностью
- Права