Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
BEZEICHNUNG
errno - die Nummer des letzten aufgetretenen Fehlers
ÜBERSICHT
#include <errno.h>
extern int errno;
BESCHREIBUNG
Die Integer-Variable errno wird von Systemaufrufen (und einigen
Bibliotheksfunktionen) gesetzt, um anzuzeigen, was schief gelaufen ist.
Ihr Wert ist nur dann von Bedeutung, wenn der Aufruf einen Fehler
(normalerweise -1) zurückgegeben hat. Eine Bibliotheksfunktion darf
errno ändern, selbst wenn sie erfolgreich verläuft.
Ist -1 auch ein gültiger Rückgabewert, muss errno vor dem Aufruf auf 0
gesetzt werden, um eventuelle Fehler entdecken zu können.
Der ISO-C-Standard definiert errno als veränderbaren lvalue des Typs
int, der nicht explizit deklariert sein darf; errno kann ein Makro
sein. Jeder Thread erhält eine eigene errno; wird sie in einem Thread
gesetzt, wirkt sich das nicht auf ihren Wert in anderen Threads aus.
Alle gültigen Fehlernummern sind ungleich 0; keine Bibliotheksfunktion
setzt errno auf 0. Alle von POSIX.1 definierten Fehlerbezeichnungen
müssen voneinander verschiedene Werte besitzen.
POSIX.1 enthält (in der Ausgabe von 2001) die nachfolgende Liste
symbolischer Fehlerbezeichnungen. Im ISO-C-Standard sind davon EDOM
und ERANGE vorgesehen. Der ISO-C Zusatz 1 definiert zusätzlich die
Fehlernummer EILSEQ für Kodierungsfehler bei Multi-Byte- oder Wide-
Zeichen.
E2BIG Die Argumentenliste zu lang
EACCES Keine Berechtigung
EADDRNOTAVAIL
Adresse nicht verfügbar
EAFNOSUPPORT
Adressfamilie nicht unterstützt
EAGAIN Ressource zurzeit nicht verfügbar
EALREADY
Verbindung bereits in Bearbeitung
EBADF Ungültiger Dateideskriptor
EBADMSG
Ungültige Nachricht
EBUSY Gerät oder Ressource belegt
ECANCELED
Operation abgebrochen
ECHILD Keine Kind-Prozesse
ECONNREFUSED
Verbindung abgelehnt
ECONNRESET
Verbindung zurückgesetzt
EDEADLK
Verklemmung beim Zugriff auf eine Ressource vermieden
EDESTADDRREQ
Zieladresse erwartet
EDOM Domain-Fehler
EDQUOT reserviert
EEXIST Datei existiert bereits
EFAULT Ungültige Adresse
EFBIG Datei zu groß
EINPROGRESS
Operation in Bearbeitung
EINTR Unterbrechung während des Betriebssystemaufrufs
EINVAL Argument ungültig
EIO Eingabe-/Ausgabefehler
EISCONN
Socket ist verbunden
EISDIR Ist ein Verzeichnis
ELOOP Zuviele Stufen symbolischer Links
EMFILE Zu viele offene Dateien
EMLINK Zu viele Links
EMSGSIZE
nicht ausreichend großer Puffer
EMULTIHOP
reserviert
ENAMETOOLONG
Dateiname zu lang
ENETDOWN
Netzwerk ist unten
ENETRESET
Verbindung durch Netzwerk abgebrochen
ENETUNREACH
Netzwerk unerreichbar
ENFILE Zu viele offene Dateien im System
ENOBUFS
Kein Pufferspeicher verfügbar
ENODATA
Keine Nachricht verfügbar in der Lese-Warteschlange im STREAM-
Kopf
ENODEV Die Operation wird von diesem Gerät nicht unterstützt
ENOENT Datei oder Verzeichnis nicht gefunden
ENOEXEC
Fehler im Format der Programmdatei
ENOLCK Keine Sperren verfügbar
ENOLINK
reserviert
ENOMEM Nicht genügend Hauptspeicher verfügbar
ENOMSG keine Nachricht des erwarteten Typs
ENOPROTOOPT
Protokoll nicht verfügbar
ENOSPC kein Speicherplatz auf dem Gerät verfügbar
ENOSR keine STREAM-Ressourcen
ENOSTR kein STREAM
ENOSYS Die angeforderte Funktion ist nicht implementiert
ENOTCONN
Socket nicht verbunden
ENOTDIR
Ist kein Verzeichnis
ENOTEMPTY
Das Verzeichnis ist nicht leer
ENOTSOCK
kein Socket
ENOTSUP
Die Operation wird nicht unterstützt
ENOTTY Unpassender IOCTL (I/O-Control) für das Gerät
ENXIO Das Gerät ist nicht konfiguriert
EOPNOTSUPP
Operation nicht unterstützt auf diesem Socket
EOVERFLOW
Wert zu lang, um im Datentyp gespeichert werden zu können
EPERM Die Operation ist nicht erlaubt
EPIPE Datenübergabe unterbrochen (broken pipe)
EPROTO Protokoll-Fehler
EPROTONOSUPPORT
Protokoll nicht unterstützt
EPROTOTYPE
falscher Protokolltyp für Socket
ERANGE Das numerische Ergebnis ist außerhalb des gültigen Bereiches
EROFS Das Dateisystem ist nur lesbar
ESPIPE Nicht erlaubter Seek
ESRCH Kein passender Prozess gefunden
ESTALE reserviert
ETIME Timeout im STREAM-ioctl()
ETIMEDOUT
Die Wartezeit für die Verbindung ist abgelaufen
ETXTBSY
Textdatei kann nicht ausgeführt werden, weil sie noch zum
Schreiben geöffnet ist.
EWOULDBLOCK
Operation würde blockieren (kann der gleiche Wert wie EAGAIN
sein)
EXDEV Ungültiger Link über Gerätegrenzen hinweg
ANMERKUNG
Ein beliebter Fehler ist
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ... }
}
zu schreiben, wobei errno nicht mehr den gleichen Wert beinhalten muss,
den es nach Rückkehr von somecall() gehabt hat. Wenn der Wert von
errno über einen Bibliotheksaufruf gesichert werden soll, muss er
explizit gespeichert werden:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ... }
}
SIEHE AUCH
perror(3), strerror(3).
5. Oktober 2002 ERRNO(3)