catopen () не устанавливает errno при сбое в некоторых случаях - PullRequest
0 голосов
/ 14 марта 2012

catopen не может открыть один и тот же файл cat на разных серверах с одинаковыми настройками.

Когда errno равен 0, это означает, что в моем понимании нет ошибки.

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

Пример кода, который я написал

int main()
{

   nl_catd cat;

   string fileName;

   cout<<"Enter the cat file name: ";

   cin>>fileName;

   cat = catopen(fileName.c_str(), 0);

   if (cat == (nl_catd)-1)

   {

      cerr << "Unable to open catalogue: " << fileName <<" ....and the Error number: "<<errno<<"\n";

      exit(1);

   }

   printf("File opened...\n");

   catclose( cat );

   exit(0);

}

Выход для вышеуказанного кода

Для успешного случая:

./a.out

Enter the cat file name: LinkMonitor.epod.cat

File opened...

Для случая сбоя:

./a.out

Enter the cat file name: ehap_ac_in.epod.cat

Unable to open catalogue: ehap_ac_in.epod.cat0

Здесь 0 - код ошибки.

1 Ответ

2 голосов
/ 14 марта 2012

Вы очистили errno, когда написали строку "Unable to open catalogue: " в cerr.

Вы должны сразу сохранить значение errno.

cat = catopen(fileName.c_str(), 0); 

if (cat == (nl_catd)-1) 

{ 
   int errno_catopen = errno;
   cerr << "Unable to open catalogue: " << fileName <<" ....and the Error number: "<<errno_catopen <<"\n";
   exit(errno_catopen);
} 
...