c прочитать права доступа к файлу - PullRequest
5 голосов
/ 16 сентября 2009

Как я могу проверить, есть ли у файла разрешения на чтение в C?

Ответы [ 3 ]

9 голосов
/ 16 сентября 2009

Используйте access(2) в POSIX. В стандарте C лучшее, что вы можете сделать, это попытаться открыть его с помощью fopen() и посмотреть, удастся ли это.

Если fopen() возвращает NULL, вы можете попытаться использовать errno, чтобы различать случаи "Файл не существует" (errno == ENOENT) и "Отказано в доступе" (errno == EACCES) - но, к сожалению, это случаи два значения errno определяются только POSIX.

(Даже в POSIX в большинстве случаев лучше всего попытаться открыть файл, а затем посмотреть, почему он не удался, поскольку использование access() вводит очевидное условие гонки).

8 голосов
/ 16 сентября 2009

Я фанат использования stat () , сам.

7 голосов
/ 16 сентября 2009

Используйте функцию access () :

if (access(pathname, R_OK) == 0)
{
    /* It's readable by the current user. */
}

errno будет установлен на ENOENT, если файл не существует, или EACCES, если он существует, но не доступен для текущего пользователя. См. страницу руководства для получения дополнительных кодов ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...