2017-02-02 9 views
1

Я разрабатываю модуль для Apache Server. В этом я пытаюсь прочитать файл из пути/tmp/_clusterMemberName/с помощью stat (const char * filename, struct stat * buf). Моя проблема - функция stat() возвращает -1, даже если файл существует на пути. Если я изменил местоположение файла с /tmp/_clusterMemberName/ до /opt/, тогда функция stat() работает нормально. Пожалуйста, помогите мне выяснить причину.почему stat() возвращает -1, даже если файл существует [RHEL 7.2]

+0

После того, как вы называете стат(), выяснить, какое значение ERRNO имеет и посмотреть, подходит ли он один из случаев на странице man на stat. –

ответ

0

Скорее всего, причина в том, что /tmp недоступен.

Вам необходимо посмотреть на значение errno, которое возвращается stat. Если это EACCES, причина этого в том, что у пользователя нет разрешений на доступ /tmp. Если это EPERM, причиной может быть политика SELinux, предотвращающая доступ httpd к /tmp. Если вы используете SELinux, убедитесь, что вы знаете справочную страницу httpd_selinux.

Вы можете включить httpd доступ к /tmp с:

setsebool httpd_tmp_t 1 

и внести изменения упорных с

setsebool -P httpd_tmp_t 1 
+0

спасибо за ввод. На моей машине я не могу отключить SELinux и получить значение errno 2. – ashutosh

+0

Я хочу поделиться этим, эта же установка работает на машине RHEL6. – ashutosh

+0

Значение errno 2 - ENOENT. вы уверены, что у вас нет орфографической ошибки в '/ tmp/_clusterMemberName'? –