catopen() no establece errno cuando falla en algunos casos
-
13-12-2019 - |
Pregunta
catopen no puede abrir el mismo archivo cat en diferentes servidores, con la misma configuración.
Cuando errno es 0, según tengo entendido, no significa ningún error.
Por favor díganme si alguien ha visto algo así antes.Si alguien sabe el porque me pasa me seria de mucha ayuda
Código de muestra que escribí
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);
}
Salida para el código anterior
Para un caso exitoso:
./a.out Enter the cat file name: LinkMonitor.epod.cat File opened...
Para caso de falla:
./a.out Enter the cat file name: ehap_ac_in.epod.cat Unable to open catalogue: ehap_ac_in.epod.cat0
Aquí 0 es el código de error.
Solución
tu limpiaste errno
cuando escribiste la cadena "Unable to open catalogue: "
a cerr
.
Tienes que guardar el valor de errno
inmediatamente.
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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow