strerror(3)

BEZEICHNUNG
strerror, strerrorname_np, strerrordesc_np, strerror_r, strerror_l - gibt eine Zeichenkette zurück, die den Fehlercode beschreibt

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <string.h>

char *strerror(int fehlernum);
const char *strerrorname_np(int fehlernum);
const char *strerrordesc_np(int fehlernum);

int strerror_r(size_t größe;
               int fehlernum, char puf[größe], size_t größe);
               /* XSI-konform */

char *strerror_r(size_t größe;
               int fehlernum, char puf[größe], size_t größe);
               /* GNU-spezifisch */

char *strerror_l(int fehlernum, locale_t locale);

    Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

strerrorname_np(), strerrordesc_np():
    _GNU_SOURCE

strerror_r():
    Die XSI-konforme Version wird bereitgestellt, falls:
        (_POSIX_C_SOURCE >= 200112L) && ! _GNU_SOURCE
    Anderenfalls wird die GNU-spezifische Version bereitgestellt.

BESCHREIBUNG
Die Funktion strerror() gibt einen Zeiger auf eine Zeichenkette mit der Beschreibung des Fehlercodes für das übergebene Argument fehlernum zurück. Möglicherweise wertet sie dabei den LC_MESSAGES-Teil der aktuellen Locale aus, um die passende Sprache zu wählen. (Falls beispielsweise fehlernum EINVAL ist, dann wird die zurückgelieferte Beschreibung »Invalid argument« sein.). Diese Zeichenkette darf nicht von der Anwendung verändert werden und der zurückgelieferte Zeiger wird bei nachfolgenden Aufrufen von strerror() oder strerror_l() für ungültig erklärt oder falls der Thread, der die Zeichenkette erlangte, sich beendet. Diese Zeichenkette wird von keiner anderen Bibliotheksfunktion, inklusive perror(3), verändert.

Wie strerror() gibt die Funktion strerrordesc_np() einen Zeiger auf eine Zeichenkette zurück, die den Fehlercode des im Argument fehlernum übergebenen Fehlers enthält, jedoch mit dem Unterschied, dass die zurückgegebene Zeichenkette nicht anhand der aktuellen Locale übersetzt ist.

Die Funktion strerrorname_np() gibt einen Zeiger auf eine Zeichenkette zurück, die den Namen des im Argument fehlernum übergebenen Fehlers enthält. Ist beispielsweise EPERM als Argument angegeben, gibt diese Funktion einen Zeiger auf die Zeichenkette »EPERM« zurück. Wird 0 als ein Argument übergeben, dann liefert diese Funktion einen Zeiger auf die Zeichenkette »0« zurück.

  strerror_r()
strerror_r() ist ähnlich zu strerror(), könnte aber den bereitgestellten Puffer puf verwenden, anstatt einen intern zu reservieren. Diese Funktion ist in zwei Versionen verfügbar: eine in POSIX.1-2001 beschriebene XSI-konforme Version (verfügbar seit Glibc 2.3.4, aber vor Glibc 2.13 nicht POSIX-konform) und eine GNU-spezifische Version (verfügbar seit Glibc 2.0). Die XSI-konforme Version wird durch die in der ÜBERSICHT angegebenen Feature-Test-Makroeinstellungen bereitgestellt; anderenfalls wird die GNU-Version verwendet. Ohne explizit vereinbarte Feature-Test-Makros wird (seit Glibc 2.4) standardmäßig _POSIX_C_SOURCE mit dem Wert 200112L belegt, sodass standardmäßig die XSI-Variante von strerror_r() verwendet wird.

Die XSI-konforme strerror_r() ist für portable Anwendungen vorzuziehen. Sie gibt die Fehlerzeichenkette im vom Nutzer bereitgestellten Puffer puf der Größe größe zurück.

Die GNU-spezifische strerror_r() gibt einen Zeiger auf eine Zeichenkette zurück, die die Fehlernachricht enthält. Dies kann entweder ein Zeiger auf eine Zeichenkette sein, die die Funktion in puf speichert, oder ein Zeiger auf irgendeine (unveränderbare statische) Zeichenkette(wobei dann puf nicht genutzt wird). Wenn die Funktion in puf eine Zeichenkette speichert, werden höchstens größe Bytes gespeichert (die Zeichenkette kann gekürzt werden, wenn größe zu klein und fehlernum unbekannt ist). Die Zeichenkette enthält immer ein abschließendes Nullbyte (»\0«).

  strerror_l()
strerror_l() verhält sich wie strerror(), aber weist fehlernum einer locale-abhängigen Fehlermeldung in der durch locale angegebenen Locale zu. Das Verhalten von strerror_l() ist nicht definiert, wenn locale das spezielle Locale-Objekt LC_GLOBAL_LOCALE ist oder kein gültiges Handle für ein Locale-Objekt.

RÜCKGABEWERT
Die Funktionen strerror(), strerror_l() und die GNU-spezifische strerror_r() geben die entsprechende Zeichenkette mit der Fehlerbeschreibung zurück oder eine Nachricht »Unbekannter Fehler nnn«, wenn die Fehlernummer unbekannt ist.

Bei Erfolg geben strerrorname_np() und strerrordesc_np() die entsprechende den Fehler beschreibende Zeichenkette zurück. Falls fehlernum eine unzulässige Fehlernummer ist, geben diese Funktionen NULL zurück.

Die XSI-konforme Funktion strerror_r() gibt bei Erfolg 0 zurück. Im Fehlerfall wird eine positive Fehlernummer (seit Glibc 2.13) oder -1 zurückgegeben und errno mit einem Wert belegt, der den Fehler angibt (Glibc vor Version 2.13).

POSIX.1-2001 und POSIX.1-2008 verlangen, dass ein erfolgreicher Aufruf von strerror() oder strerror_l() errno unverändert belässt. Sie merken an, dass wegen des nicht definierten Rückgabewerts zur Anzeige eines Fehlers eine Anwendung zur Fehlerprüfung vor dem Aufruf errno auf Null setzen und nach dem Aufruf überprüfen sollte.

FEHLER

EINVAL
    Der Wert von fehlernum ist keine gültige Fehlernummer.

ERANGE
    Es wurde unzureichender Speicher für die Aufnahme der Fehler-Zeichenkette bereitgestellt.

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
strerror() | Multithread-Fähigkeit | MT-Sicher
strerrorname_np(), strerrordesc_np() | Multithread-Fähigkeit | MT-Sicher
strerror_r(), strerror_l() | Multithread-Fähigkeit | MT-Sicher

Vor Glibc 2.32 war strerror() nicht MT-Sicher.

STANDARDS

strerror()
    C11, POSIX.1-2008.

strerror_r()
strerror_l()
    POSIX.1-2008.

strerrorname_np()
strerrordesc_np()
    GNU.

POSIX.1-2001 gestattet strerror() das Setzen von errno wenn der Aufruf einen Fehler bewirkt, gibt aber nicht vor, welchen Wert die Funktion im Fehlerfall zurückgeben sollte. Auf einigen Systemen gibt strerror() NULL zurück, wenn die Fehlernummer nicht bekannt ist. Auf anderen Systemen gibt strerror() eine Meldung etwa wie »Fehler nnn aufgetreten« und setzt errno auf EINVAL, wenn die Fehlernummer unbekannt ist. C99 und POSIX.1-2008 verlangen, dass der Rückgabewert von NULL verschieden ist.

GESCHICHTE

strerror()
    POSIX.1-2001, C89.

strerror_r()
    POSIX.1-2001.

strerror_l()
    Glibc 2.6. POSIX.1-2008.

strerrorname_np()
strerrordesc_np()
    glibc 2.32.

ANMERKUNGEN
strerrorname_np() und strerrordesc_np() sind weder multithread-fähig noch asynchronsignalsicher.

SIEHE AUCH
err(3), errno(3), error(3), perror(3), strsignal(3), locale(7), signal-safety(7)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.