GNU/Linux >> Linux Esercitazione >  >> Linux

Stampa errno come mnemonico?

strerror risponde alla seconda parte della tua domanda (come fai notare), o meglio strerror_r , ma in glibc almeno puoi semplicemente usare %m come identificatore di formato.

La prima parte è più interessante, ovvero come si ottiene il nome della costante C per l'errore. Credo che non ci sia modo di farlo usando lo standard glibc . Potresti costruire il tuo array statico o tabella hash per farlo in modo relativamente semplice.


Sfortunatamente no; non c'è supporto per l'introspezione per il E macro di errore.

Puoi farlo banalmente in Python:

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

Questo perché i manutentori di Python si sono presi la briga di generare una tabella di ricerca:http://hg.python.org/cpython/file/tip/Modules/errnomodule.c


Qual è il problema?

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"'

Questo comando shell unix stampa E* definisce da /usr/include/sys/errno.h (dove actual definisce live) nella forma { EINVAL, "EINVAL" }, . Puoi quindi avvolgerlo in un array:

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

E ordina per valore errno in fase di esecuzione, se necessario. Se vuoi essere portatile (in una certa misura), considera di renderlo parte del processo di compilazione. Non preoccuparti, questo è il vero modo unix di farlo :)


Linux
  1. Stampa tutti i file in una cartella?

  2. Esempi di comandi awk in Linux

  3. awk:comando non trovato

  4. Come ottenere ps per stampare il gruppo?

  5. 2 stampanti 1 coda

Come stampare un numero nell'assemblea NASM?

Come posso stampare un messaggio su stderr in Go?

Come annullare il comando di decompressione?

Stampa indirizzo mac su file

Stampa i colori della console

Come si stampano i contenuti di at job?