GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehlermeldung als Merkhilfe ausgeben?

Der zweite Teil Ihrer Frage wird von strerror beantwortet (wie Sie darauf hinweisen), oder besser strerror_r , aber in glibc zumindest können Sie einfach %m verwenden als Formatbezeichner.

Interessanter ist der erste Teil, d.h. wie bekommt man den Namen der C-Konstante für den Fehler. Ich glaube, es gibt keine Möglichkeit, dies mit Standard glibc zu tun . Sie könnten Ihr eigenes statisches Array oder Ihre eigene Hash-Tabelle erstellen, um dies relativ einfach zu tun.


Leider nicht; es gibt keine Selbstbeobachtungsunterstützung für E Fehlermakros.

Sie können dies trivial in Python tun:

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

Das liegt daran, dass sich die Python-Maintainer die Mühe gemacht haben, eine Lookup-Tabelle zu generieren:http://hg.python.org/cpython/file/tip/Modules/errnomodule.c


Was ist das Problem?

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

Dieser Unix-Shell-Befehl gibt E* aus definiert ab /usr/include/sys/errno.h (wobei „actual“ live definiert) in der Form { EINVAL, "EINVAL" }, . Sie können es dann in ein Array packen:

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

Und bei Bedarf zur Laufzeit nach Errno-Wert sortieren. Wenn Sie (bis zu einem gewissen Grad) portabel sein möchten, sollten Sie dies zu einem Teil des Build-Prozesses machen. Keine Sorge, das ist die wahre Unix-Methode :)


Linux
  1. Druckerverwaltung

  2. Zwei Dateien in zwei Spalten drucken?

  3. Shell-Skript zum Drucken der Sternenpyramide

  4. lpr-Befehlsbeispiele unter Linux

  5. lpr:Befehl nicht gefunden

awk-Befehlsbeispiele unter Linux

awk:Befehl nicht gefunden

Wie drucke ich eine Nummer in Assembly NASM?

Wie bekomme ich ps zur Druckgruppe?

Konsolenfarben drucken

Wie drucke ich Inhalte von Jobs?