catopen() não define errno quando falha em alguns casos
-
13-12-2019 - |
Pergunta
catopen não consegue abrir o mesmo arquivo cat em servidores diferentes, com a mesma configuração.
Quando errno é 0, significa que não há erro no meu entendimento.
Por favor, diga-me se alguém já viu isso antes.Se alguém souber o motivo pelo qual isso está acontecendo, será muito útil para mim
Exemplo de código que escrevi
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);
}
Saída para o código acima
Para caso de sucesso:
./a.out Enter the cat file name: LinkMonitor.epod.cat File opened...
Para caso de faliure:
./a.out Enter the cat file name: ehap_ac_in.epod.cat Unable to open catalogue: ehap_ac_in.epod.cat0
Aqui 0 é o código de erro.
Solução
Você limpou errno
quando você escreveu a string "Unable to open catalogue: "
para cerr
.
Você tem que economizar o valor de errno
imediatamente.
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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow