catopen() не устанавливает errno при сбое в некоторых случаях
-
13-12-2019 - |
Вопрос
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 — код ошибки.
Решение
Вы очистили 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);
}
Не связан с StackOverflow