Si vous écrivez une application multi-thread qui utilise des appels système / bibliothèque qui utilisent errno pour indiquer le type d’erreur, existe-t-il un moyen sûr d’utiliser errno? Sinon, y a-t-il un autre moyen d’indiquer le type d’erreur survenu plutôt qu’une simple erreur?
Si votre bibliothèque standard est multithread, alors elle a probablement une #define
qui change errno
en appel de fonction qui retourne une valeur de retour d’erreur au niveau du thread. Cependant, pour utiliser cela, vous devez généralement inclure
, plutôt que de vous fier à une déclaration extern
.
J’ai trouvé un article Thread-safety et POSIX.1 qui répond à cette question.
man errno
dit:
errno est défini par la norme ISO C comme une valeur modifiable de type int et ne doit pas être explicitement déclaré; errno peut être une macro. errno est thread-local; le placer dans un thread n’affecte pas sa valeur dans aucun autre thread.