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 erlaubtENOENT: Datei oder Verzeichnis nicht gefundenESRCH: Kein solcher ProzessEINTR: Unterbrochener SystemaufrufEIO: Eingabe-/AusgabefehlerENXIO: Kein solches Gerät oder AdresseE2BIG: Argumentliste zu langENOMEM: Nicht genügend SpeicherEACCES: Zugriff verweigertEFAULT: Ungültige AdresseEBUSY: Ressource belegtEEXIST: Datei existiert bereitsEXDEV: Geräteübergreifender LinkENODEV: Kein solches GerätENOTDIR: Kein VerzeichnisEISDIR: Ist ein VerzeichnisEINVAL: Ungültiges ArgumentENFILE: Überlauf der SystemdateitabelleEMFILE: Zu viele offene DateienENOTTY: Kein TerminalgerätETXTBSY: Textdatei ist belegtEFBIG: Datei zu großENOSPC: Kein Speicherplatz mehr auf dem GerätESPIPE: Unzulässige AdressierungEROFS: Nur-Lese-DateisystemEMLINK: Zu viele VerknüpfungenEPIPE: 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 <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
- 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. - AnfangswertBei einem erfolgreichen Aufruf ändern Bibliotheksfunktionen normalerweise nicht
errnoden Wert. Daher sollten Sie vor der Überprüfung des Fehlers sicherstellenerrnoauf 0 gesetzt wird. - 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
- Rückgabewert prüfenWenn Sie eine Funktion aufrufen, die fehlschlagen kann, prüfen Sie immer ihren Rückgabewert.
- Einstellung
errnoist 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. - Nutzung
strerror: 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 Nummer | Makro & Beschreibung |
|---|---|
| 1 | extern int errno Dies ist ein Makro, das durch Systemaufrufe gesetzt wird; bei Fehlerereignissen geben bestimmte Bibliotheksfunktionen an, welcher Fehler aufgetreten ist. |
| 2 | EDOM 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. |
| 3 | ERANGE 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. |