errno, _doserrno, _sys_errlist und _sys_nerr
Diese globalen Variablen speichern Fehlercodes Verwendung durch die perror und strerror-Funktionen zum Drucken von Fehlermeldungen an.Diese sichereren funktionalen Versionen, die in dieser Tabelle aufgeführt sind, sollten anstelle ihrer globalen Variablen verwendet werden.
Globale Variablen |
Funktionale Entsprechungen |
---|---|
_doserrno |
|
_errno |
Diese Variablen werden in STDLIB.H deklariert z.
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
Hinweise
errno und _errno werden an die gleiche Variable verbunden.errno wird mit dem Code definiert #define errno (*_errno())
errno wird auf einem Fehler in einem Aufruf auf Systemebene festgelegt.Da errno den Wert für den letzten Aufruf enthält, der ihn festlegen, wird dieser Wert geändert werden, indem Aufrufe folgt.Überprüfen Sie immer errno unmittelbar vor und nach dem Aufruf, der diese fest.
Bei einem Fehler wird errno nicht unbedingt auf den gleichen Wert wie der Fehlercode festgelegt, der durch einen Systemaufruf zurückgegeben wurde.Für E/A-Vorgänge, die _doserrno Verwendung von entsprechungen entspricht Betriebssystem errno Code zugreifen.Für die meisten non-I/O Vorgänge wird der Wert von _doserrno nicht definiert.
Jeder errno-Wert wird mit einer Fehlermeldung zugeordnet, die mit perror gedruckt oder in einer Zeichenfolge mit strerrorgespeichert werden kann.perror und strerror verwenden das _sys_errlist Array, _sys_nerr, die Anzahl der Elemente in _sys_errlist, um Fehlerinformationen zu verarbeiten.
Mathematische Routinen der Bibliothek errno legen Sie fest, indem sie _matherraufgerufen haben.Um mathematische Fehler anders zu behandeln, schreiben Sie besitzen Routine gemäß der Beschreibung der Verweise _matherr und benennen diese _matherr.
Alle errno-Werte, definiert als vordefinierte Konstanten in ERRNO.H, sind im Folgenden aufgeführt werden und UNIX-kompatibel.Nur ERANGE, EILSEQ und EDOM werden im ANSI-Standard angegeben.
Konstante |
Systemfehler Fehlermeldung |
Wert |
---|---|---|
EPERM |
Vorgang nicht zulässig |
1 |
ENOENT |
Eine solche Datei oder das Verzeichnis |
2 |
ESRCH |
Keine so Prozess |
3 |
EINTR |
Unterbrochene Funktion |
4 |
EIO |
E/A-Fehler |
5 |
ENXIO |
Es wurde kein solches Gerät oder Adresse |
6 |
E2BIG |
Argumentliste zu lang |
7 |
ENOEXEC |
Fehler im Format Leitprogramm |
8 |
EBADF |
Ungültiges Dateiverweise |
9 |
ECHILD |
Keine erzeugten Prozesse |
10 |
EAGAIN |
Nicht mehr Prozesse oder nicht genügend Speicher oder Schachtelungsebene Maximum erreicht |
11 |
ENOMEM |
Nicht genügend Arbeitsspeicher |
12 |
EACCES |
Berechtigung verweigert. |
13 |
EFAULT |
Ungültige Adresse |
14 |
EBUSY |
Gerät oder Ressource ausgelastet |
16 |
EEXIST |
Datei vorhanden ist |
17 |
EXDEV |
Referenz zu Dateisystemgrenzen |
18 |
ENODEV |
Es wurde kein solches Gerät |
19 |
ENOTDIR |
Kein Verzeichnis |
20 |
EISDIR |
Ist ein Verzeichnis |
21 |
EINVAL |
Ungültiges Argument |
22 |
ENFILE |
Zu viele Dateien geöffnet im System |
23 |
EMFILE |
Zu viele Öffnen von Dateien |
24 |
ENOTTY |
Ungeeigneter E/A-Steuerungs-Vorgang |
25 |
EFBIG |
Datei zu groß |
27 |
ENOSPC |
Kein Speicherplatz noch ein Gerät |
28 |
ESPIPE |
Ungültige Suche |
29 |
EROFS |
Ein schreibgeschützter Dateisystem |
30 |
EMLINK |
Zu viele Links |
31 |
EPIPE |
Unterbrochene Pipe |
32 |
EDOM |
Mathematisches Argument |
33 |
ERANGE |
Ergebnis zu groß |
34 |
EDEADLK |
auftreten würde deadlock Ressourcen |
36 |
EDEADLOCK |
Identisch mit EDEADLK aus Gründen der Kompatibilität mit älteren Microsoft C-Versionen |
36 |
ENAMETOOLONG |
Name zu lang |
38 |
ENOLCK |
Keine verfügbaren Sperren |
39 |
ENOSYS |
Funktion nicht unterstützt |
40 |
ENOTEMPTY |
Verzeichnis nicht leer |
41 |
EILSEQ |
Ungültige Bytefolge |
42 |
STRUNCATE |
Zeichenfolge abgeschnitten wurde |
80 |