La limitation curieuse de errno(3) sous Linux
La page de manuel errno(3) de Linux révèle une limitation particulière : errno peut être modifié même lors d’appels de fonction réussis, et il n’est jamais défini sur zéro par un appel système ou une fonction de bibliothèque. Cela provient de la conception traditionnelle d’Unix, où les appels système retournent généralement errno uniquement en cas d’échec, le laissant inchangé en cas de succès. Les fonctions de bibliothèque C peuvent effectuer plusieurs appels système, dont certains peuvent échouer sans affecter le succès global de la fonction de bibliothèque, laissant errno avec la valeur d’échec. ANSI C et POSIX ont hérité de ce comportement, exigeant qu’errno soit significatif uniquement lorsqu’une fonction échoue et que sa documentation spécifie la définition d’errno.