catopen() ne définit pas le numéro d'erreur en cas d'échec dans certains cas
-
13-12-2019 - |
Question
catopen ne parvient pas à ouvrir le même fichier cat sur différents serveurs, avec la même configuration.
Lorsque errno est 0, cela signifie qu'il n'y a aucune erreur d'après ma compréhension.
S'il vous plaît dites-moi si quelqu'un a déjà vu ça.Si quelqu'un connaît la raison pour laquelle cela se produit, cela me serait très utile
Exemple de code que j'ai écrit
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);
}
Sortie pour le code ci-dessus
Pour un cas réussi :
./a.out Enter the cat file name: LinkMonitor.epod.cat File opened...
En cas d'échec :
./a.out Enter the cat file name: ehap_ac_in.epod.cat Unable to open catalogue: ehap_ac_in.epod.cat0
Ici 0 est le code d'erreur.
La solution
Vous avez effacé errno
quand tu as écrit la chaîne "Unable to open catalogue: "
à cerr
.
Vous devez sauvegarder la valeur de errno
tout de suite.
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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow