C-Standardbibliothek -<errno.h>

Einführung

der C-Standardbibliothekerrno.hDie Header-Datei definiert GanzzahlvariablenerrnoEs wird durch Systemaufrufe gesetzt; bei Fehlerereignissen geben bestimmte Bibliotheksfunktionen an, welcher Fehler aufgetreten ist. Dieses Makro expandiert zu einem modifizierbaren Lvalue vom Typ int, sodass es von einem Programm gelesen und geändert werden kann.

<errno.h>ist eine Header-Datei in der C-Standardbibliothek, die einen Mechanismus zum Melden und Behandeln von Fehlern in Programmen bereitstellt. Diese Header-Datei definiert Makros und Variablen, um die Arten von Laufzeitfehlern anzugeben und zu beschreiben.

errno.hDie Header-Datei definiert eine Reihe von Makros, die verschiedene Fehlercodes darstellen; diese Makros sollten zu Ausdrücken des TypsintGanzzahl-Konstantenausdruck expandieren.

errnoEs ist eine globale Variable, die dazu dient, den zuletzt aufgetretenen Fehlercode zu speichern. Der Typ dieser Variable istintWenn eine Bibliotheksfunktion auf einen Fehler stößt, setzt sie normalerweiseerrno, um die Art des Fehlers anzugeben.

Zum Beispiel, bei Dateioperationen, wennfopenWenn eine Funktion fehlschlägt, weil die Datei nicht existiert, wird sie setzenerrnoSetzen aufENOENT。

Häufige Fehlercodes

Die folgenden sind einige häufige Fehlercodes; sie sind<errno.h>als Makros definiert in:

  • EPERM: Operation nicht erlaubt
  • ENOENT: Datei oder Verzeichnis nicht gefunden
  • ESRCH: Kein solcher Prozess
  • EINTR: Unterbrochener Systemaufruf
  • EIO: Eingabe-/Ausgabefehler
  • ENXIO: Kein solches Gerät oder Adresse
  • E2BIG: Argumentliste zu lang
  • ENOMEM: Nicht genügend Speicher
  • EACCES: Zugriff verweigert
  • EFAULT: Ungültige Adresse
  • EBUSY: Ressource belegt
  • EEXIST: Datei existiert bereits
  • EXDEV: Geräteübergreifender Link
  • ENODEV: Kein solches Gerät
  • ENOTDIR: Kein Verzeichnis
  • EISDIR: Ist ein Verzeichnis
  • EINVAL: Ungültiges Argument
  • ENFILE: Überlauf der Systemdateitabelle
  • EMFILE: Zu viele offene Dateien
  • ENOTTY: Kein Terminalgerät
  • ETXTBSY: Textdatei ist belegt
  • EFBIG: Datei zu groß
  • ENOSPC: Kein Speicherplatz mehr auf dem Gerät
  • ESPIPE: Unzulässige Adressierung
  • EROFS: Nur-Lese-Dateisystem
  • EMLINK: Zu viele Verknüpfungen
  • EPIPE: Unterbrochene Pipe

Anwendungsbeispiele

Das folgende ist ein einfaches Beispiel unter Verwendung von errno, das zeigt, wie man Fehler beim Öffnen von Dateien behandelt:

Beispiel

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");
    if (file == NULL) {
        printf("Fehler beim Öffnen der Datei: %s\n", strerror(errno));
        return 1;
    }

    // Dateiverarbeitungscode
    fclose(file);
    return 0;
}

In diesem Beispiel, wennfopenFunktion fehlschlägt,errnowird auf den entsprechenden Fehlercode gesetzt.strerrorDie Funktion wird verwendet, umerrnoin eine für Menschen lesbare Fehlermeldung umgewandelt.

Hinweise

  1. Thread-Sicherheit: In Multithread-Programmen,errnoEs wird normalerweise als thread-lokaler Speicher (Thread-Local Storage, TLS) implementiert, um sicherzustellen, dass jeder Thread einen unabhängigen Fehlercode hat.
  2. AnfangswertBei einem erfolgreichen Aufruf ändern Bibliotheksfunktionen normalerweise nichterrnoden Wert. Daher sollten Sie vor der Überprüfung des Fehlers sicherstellenerrnoauf 0 gesetzt wird.
  3. FehlercodebereichVerschiedene Betriebssysteme und C-Standardbibliotheksimplementierungen können zusätzliche Fehlercodes definieren. Programme sollten vermeiden, sich auf die numerischen Werte bestimmter Fehlercodes zu verlassen.

Empfehlungen zur Fehlerbehandlung

  1. Rückgabewert prüfenWenn Sie eine Funktion aufrufen, die fehlschlagen kann, prüfen Sie immer ihren Rückgabewert.
  2. Einstellungerrnoist 0: Bevor Sie eine Funktion aufrufen, können Sieerrnoauf 0 setzen, damit es nach dem Aufruf überprüft werden kann.errnoob er geändert wurde.
  3. Nutzungstrerror: durchstrerrorwirderrnoKonvertieren Sie es in eine lesbare Zeichenkette, um Debugging und Protokollierung zu erleichtern.

Kurz gesagt,<errno.h>Es bietet eine standardisierte Möglichkeit, Fehler in einem Programm zu melden und zu behandeln, wodurch der Fehlerbehandlungscode konsistenter und wartbarer wird.

Bibliotheksmakros

Im Folgenden sind die in der Header-Datei errno.h definierten Makros aufgeführt:

Laufende NummerMakro & Beschreibung
1extern int errno
Dies ist ein Makro, das durch Systemaufrufe gesetzt wird; bei Fehlerereignissen geben bestimmte Bibliotheksfunktionen an, welcher Fehler aufgetreten ist.
2EDOM Domänenfehler
Dieses Makro repräsentiert einen Domänenfehler, der auftritt, wenn das Eingabeargument außerhalb der durch die mathematische Funktion definierten Domäne liegt; errno wird auf EDOM gesetzt.
3ERANGE Bereichsfehler
Dieses Makro repräsentiert einen Bereichsfehler, der auftritt, wenn das Eingabeargument den durch die mathematische Funktion definierten Bereich überschreitet; errno wird auf ERANGE gesetzt.
Weitere Erweiterungen