Книга: Программирование для 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)

Оглавление книги


Генерация: 1.580. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз