stat systecall в Linux, возвращая ошибку - PullRequest
0 голосов
/ 29 июня 2009

Я использую RHEL 4

Я использую статистику syscall следующим образом: -

if (stat ("file",&stat_obj)){

     if (errno == ENOENT){
        printf("File not found");
     }else{
        printf("Unexpected error occured %d ",errno);
     }
}

иногда я получаю сообщение об ошибке как "" Произошла непредвиденная ошибка 0 "

Это означает, что я получаю ошибку как "0". я проверил права доступа к файлам, которые в порядке

что это значит? Я не могу понять, почему иногда это происходит?

Есть предложения?

Ответы [ 2 ]

1 голос
/ 29 июня 2009

Есть ли в вашей программе обработчик сигнала? Если это так, и это может повлиять на errno, убедитесь, что оно сохраняет errno при вводе и восстанавливает его первоначальное значение перед возвратом.

Также убедитесь, что вы #include <errno.h> и не объявляете errno сами, особенно если ваша программа многопоточная. errno - переменная для каждого потока, поэтому, если вы объявите ее как глобальную, вы можете получить неправильную. (На некоторых платформах иногда требуется специальный флаг компиляции, такой как -D_TS_ERRNO для поточно-ориентированного errno, но в Linux такой флаг не требуется.)

1 голос
/ 29 июня 2009

Дает ли вам какое-либо значимое сообщение об ошибке, если вы так его называете?

   if (stat("file", &stat_obj) == -1) {
       perror("stat");
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...