GNU/Linux >> Tutoriels Linux >  >> Linux

Imprimer errno comme mnémonique ?

La deuxième partie de votre question est répondue par strerror (comme vous le soulignez), ou mieux strerror_r , mais en glibc au moins vous pouvez simplement utiliser %m comme spécificateur de format.

La première partie est plus intéressante, c'est-à-dire comment obtenez-vous le nom de la constante C pour l'erreur. Je crois qu'il n'y a aucun moyen de le faire en utilisant la norme glibc . Vous pouvez construire votre propre tableau statique ou table de hachage pour le faire relativement facilement.


Malheureusement non; il n'y a pas de support d'introspection pour le E macros d'erreur.

Vous pouvez le faire trivialement en Python :

import errno
print(errno.errorcode[errno.EPERM])

C'est parce que les responsables de Python se sont donné la peine de générer une table de recherche :http://hg.python.org/cpython/file/tip/Modules/errnomodule.c


Quel est le problème ?

perl -ne 'print "$1\n" if /^#\s*define\s+(E[A-Z0-9]+)/' < /usr/include/sys/errno.h | sort | uniq | perl -ne 'chomp; print "    { $_, \"$_\" }\n"'

Cette commande shell unix affiche E* définit à partir de /usr/include/sys/errno.h (où réel définit vivre) sous la forme { EINVAL, "EINVAL" }, . Vous pouvez ensuite l'envelopper dans un tableau :

struct errno_str_t {
    int code;
    const char *str;
} errnos[] = {
    { EINVAL, "EINVAL" },
    ...
};

Et trier par valeur errno lors de l'exécution si nécessaire. Si vous voulez être portable (dans une certaine mesure), envisagez d'en faire une partie du processus de construction. Ne vous inquiétez pas, c'est la vraie façon Unix de faire ça :)


Linux
  1. Imprimer tous les fichiers d'un dossier ?

  2. Shell Script pour imprimer une pyramide d'étoiles

  3. Exemples de commandes lpr sous Linux

  4. lpr :commande introuvable

  5. Est-ce que errno est thread-safe ?

awk :commande introuvable

Comment imprimer un numéro en assembleur NASM ?

Comment obtenir ps pour imprimer le groupe?

Comment imprimer un message sur stderr dans Go ?

Imprimer l'adresse mac dans le fichier

Comment imprimer le contenu des travaux at ?