2015-11-06 1 views
2

Sous Linux et OS X, strerror renvoie un nom lisible par l'utilisateur. Par exemple, voici ce qu'il est revenu sur Linux tout à l'heure pour le numéro d'erreur 5.Existe-t-il une fonction qui retournera un nom de symbole, comme `EIO`, pour une valeur` errno`?

Input/output error 

C'est bien, mais les pages de manuel utilisent un nom symbolique, comme EIO, et ne liste pas le numéro correspondant. Y at-il une fonction que je peux utiliser pour obtenir le nom symbolique?

+0

(Veuillez supposer que je ne veux pas écrire ma propre fonction pour ce faire.) –

Répondre

2

Je doute vraiment que POSIX pur offre des installations pour y parvenir de manière portable. Dans la plupart des cas, personnellement, il suffit d'ouvrir le fichier /usr/include/errno.h dans l'éditeur et de le parcourir à partir de là. (. Sur Linux qui mène éventuellement à /usr/include/asm-generic/errno-base.h et /usr/include/asm-generic/errno.h fichiers où les codes sont effectivement spécifiés)

En outre, pour les systèmes avec GCC (ou clang), je pourrais venir avec le scriptlet comme ceci:

gcc -dM -E - < /usr/include/errno.h | 
    grep 'define E\w\+ [0-9]\+$' | 
    sort -k3 -n 

Le préprocesseur GNU a une option (-dM) pour imprimer toutes les définitions qu'il rencontre à la sortie. Cela peut être utilisé pour aider à analyser le fichier /usr/include/errno.h pour extraire les codes d'erreur.

+0

Merci pour la réponse. Oui, c'est comme si c'était ce que je devais faire. (J'espérais ne pas avoir à faire cela, car je ne veux pas vraiment prendre en charge la mise à jour de la cartographie quand/si des erreurs spécifiques au système sont introduites.) –

+1

Oui, c'est une omission. Les codes d'erreur sont ajoutés/supprimés assez rarement - le plus souvent par inadvertance. Les erreurs les plus courantes sont les "suspects habituels" comme "accès refusé" ou "pas d'espace laissé sur l'appareil" et ils ont des codes numériques stables. Si vous souhaitez conserver le mappage dans votre programme, vous n'avez pas besoin de le mettre à jour très souvent. N'oublie pas aussi de noter le code d'erreur numérique. – Dummy00001