errno(3) Library Functions Manual errno(3) BEZEICHNUNG errno - Nummer des letzten aufgetretenen Fehlers BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include BESCHREIBUNG Die Header-Datei definiert die Variable errno mit Typ integer. Sie wird von Systemaufrufen (und einigen Bibliotheksfunktionen) gesetzt, um anzuzeigen, was schief gelaufen ist. errno Der Wert in errno ist nur dann von Bedeutung, wenn der Ruckgabewert des Funktionsaufrufs einen Fehler anzeigt (d.h. -1 bei den meisten Systemaufrufen; -1 oder NULL bei den meisten Bibliotheksfunktionen). Eine erfolgreich aufgerufene Funktion darf den Wert von errno andern. Der Wert von errno wird niemals von irgendeinem Systemaufruf oder einer Bibliotheksfunktion auf Null gesetzt. Fur einige Systemaufrufe und Bibliotheksfunktionen (wie z.B. getpriority(2)) ist -1 ein gultiger Ruckgabewert bei erfolgreichem Funktionsaufruf. In solchen Fallen kann eine erfolgreiche von einer fehlgeschlagenen Ausfuhrung der Funktion unterschieden werden, indem vor dem Aufruf errno auf Null gesetzt wird und wenn der Ruckgabestatus einen Fehler anzeigt, errno untersucht wird. Der ISO-C-Standard definiert errno als veranderbaren lvalue des Typs int, der nicht explizit deklariert sein muss; errno darf ein Makro sein. Jeder Thread erhalt eine eigene, lokale errno; wird sie in einem Thread gesetzt, wirkt sich das nicht auf ihren Wert in anderen Threads aus. Fehlernummern und -namen Gultige Fehlernummer sind alle positiven Zahlen. Die Header-Datei definiert fur jeden der moglichen Fehlernummern, die in errno auftreten konnen, symbolische Namen. Mit einer Ausnahme mussen alle von POSIX.1 beschriebenen Fehlernamen unterschiedliche Werte haben. EAGAIN und EWOULDBLOCK durfen gleich sein. Unter Linux haben diese beiden Variablen auf allen Architekturen den gleichen Wert. Die Fehlernummern, die jedem symbolischen Namen entsprechen, unterscheiden sich zwischen UNIX-Systemen und selbst zwischen verschiedenen Architekturen unter Linux. Daher ist der numerische Wert in der nachfolgenden Liste der Fehlernamen nicht enthalten. Die Funktionen perror(3) und strerror(3) konnen dazu verwandt werden, diese Namen in die entsprechenden textuellen Fehlermeldungen umzuwandeln. Auf einem konkreten Linux-System kann die Liste aller symbolischen Fehlernamen und der entsprechenden Fehlernummern mittels des Befehls errno(1) (Teil des Pakets moreutils) erhalten werden: $ errno -l EPERM 1 Die Operation ist nicht erlaubt ENOENT 2 Datei oder Verzeichnis nicht gefunden ESRCH 3 Kein passender Prozess gefunden EINTR 4 Unterbrechung wahrend des Betriebssystemaufrufs EIO 5 Eingabe-/Ausgabefehler Der Befehl errno(1) kann auch zum Nachschlagen einzelner Fehlernummern und -namen und der Suche nach Zeichenketten aus den Fehlerbeschreibungen wie in dem nachfolgenden Beispiel verwandt werden: $ errno 2 ENOENT 2 Datei oder Verzeichnis nicht gefunden $ errno ESRCH ESRCH 3 Kein passender Prozess gefunden $ errno -s Berechtigung EACCES 13 Keine Berechtigung Liste der Fehlernamen In der nachfolgenden Liste der symbolischen Fehlernamen sind verschiedene Namen wie folgt gekennzeichnet: POSIX.1-2001 Der Name ist durch POSIX.1-2001 definiert und wird in neueren POSIX.1-Versionen definiert, ausser es ist anderweitig angegeben. POSIX.1-2008 Der Name ist in POSIX.1-2008 definiert, war aber nicht in alteren POSIX.1-Standards verfugbar. C99 Der Name ist durch C99 definiert. Es folgt eine Liste von symbolischen Fehlernamen, die unter Linux definiert sind: E2BIG Argumentliste zu lang (POSIX.1-2001) EACCES Keine Berechtigung (POSIX.1-2001) EADDRINUSE Adresse schon in Gebrauch (POSIX.1-2001) EADDRNOTAVAIL Adresse nicht verfugbar (POSIX.1-2001) EAFNOSUPPORT Adressfamilie nicht unterstutzt (POSIX.1-2001) EAGAIN Ressource zeitweise nicht verfugbar (darf der gleiche Wert wie EWOULDBLOCK sein, POSIX.1-2001) EALREADY Verbindung ist schon aufgebaut (POSIX.1-2001) EBADE Austausch ungultig EBADF Schlechter Dateideskriptor (POSIX.1-2001) EBADFD Dateideskriptor in schlechtem Zustand EBADMSG Ungultige Nachricht (POSIX.1-2001) EBADR Ungultiger Anforderungsdeskriptor EBADRQC Ungultiger Anforderungscode EBADSLT Ungultiger Slot EBUSY Gerat oder Ressource beschaftigt/belegt (POSIX.1-2001) ECANCELED Aktion abgebrochen (POSIX.1-2001) ECHILD Keine Kindprozesse (POSIX.1-2001) ECHRNG Kanalnummer ausserhalb des zulassigen Bereichs ECOMM Kommunikationsfehler beim Senden ECONNABORTED Verbindung abgebrochen (POSIX.1-2001) ECONNREFUSED Verbindung abgelehnt (POSIX.1-2001) ECONNRESET Verbindung zuruckgesetzt (POSIX.1-2001) EDEADLK Verklemmung beim Zugriff auf eine Resource (deadlock) vermieden (POSIX.1-2001) EDEADLOCK Auf den meisten Architekturen ein Synonym fur EDEADLK. Auf einigen Architekturen (zum Beispiel Linux MIPS, PowerPC, SPARC) ist es ein separater Fehlercode >>Verklemmungsfehler bei Dateisperrung<<. EDESTADDRREQ Zieladresse erforderlich (POSIX.1-2001) EDOM Argument einer mathematischen Funktion ausserhalb des Definitionsbereichs (POSIX.1, C99) EDQUOT Festplattenkontingent (disk quota) uberschritten (POSIX.1-2001) EEXIST Datei schon vorhanden (POSIX.1-2001) EFAULT Ungultige Adresse (POSIX.1-2001) EFBIG Datei zu gross (POSIX.1-2001) EHOSTDOWN Host/Rechner ist nicht in Betrieb EHOSTUNREACH Host/Rechner nicht erreichbar (POSIX.1-2001) EHWPOISON Speicherseite hat einen Hardware-Fehler EIDRM Identifier/Bezeichner/Kennung entfernt (POSIX.1-2001) EILSEQ Ungultiger oder unvollstandiger Multibyte oder weites Zeichen (POSIX.1, C99) Der hier gezeigte Text ist eine Glibc-Fehlerbeschreibung: in POSIX.1 wird dieser Fehler als >>Ungultige Byte-Sequenz<< beschrieben. EINPROGRESS Aktion wird gerade ausgefuhrt (POSIX.1-2001) EINTR Unterbrochener Funktionsaufruf (POSIX.1-2001); siehe signal(7) EINVAL Ungultiges Argument (POSIX.1-2001) EIO Ein-/Ausgabefehler (POSIX.1-2001) EISCONN Socket ist verbunden (POSIX.1-2001) EISDIR Ist ein Verzeichnis (POSIX.1-2001) EISNAM Ist eine Datei benannten Typs EKEYEXPIRED Schlussel ist abgelaufen EKEYREJECTED Schlussel wurde vom Dienst zuruckgewiesen EKEYREVOKED Schlussel wurde widerrufen EL2HLT Stufe 2 angehalten EL2NSYNC Stufe 2 nicht synchronisiert EL3HLT Stufe 3 angehalten EL3RST Stufe 3 zuruckgesetzt ELIBACC Zugriff auf notwendige dynamische Bibliothek nicht moglich ELIBBAD Zugriff auf eine beschadigte dynamische Bibliothek ELIBMAX Versuch, zu viele dynamische Bibliotheken zu linken ELIBSCN Abschnitt .lib in a.out defekt ELIBEXEC Eine dynamische Bibliothek kann nicht direkt ausgefuhrt werden ELNRNG Link-Nummer ausserhalb des zulassigen Bereichs ELOOP Zu viele Ebenen von symbolischen Links (POSIX.1-2001) EMEDIUMTYPE Falscher Medientyp EMFILE Zu viele offene Dateien (POSIX.1-2001). Typischerweise wird dies durch Uberschreiten der in getrlimit(2) beschriebenen Ressourcenbegrenzung RLIMIT_NOFILE hervorgerufen. Es kann aber auch durch Uberschreiten der in /proc/sys/fs/nr_open festgelegten Beschrankung hervorgerufen werden. EMLINK Zu viele Links (POSIX.1-2001) EMSGSIZE Nachricht zu lang (POSIX.1-2001) EMULTIHOP Multihop (mehrere Etappen) versucht (POSIX.1-2001) ENAMETOOLONG Dateiname zu lang (POSIX.1-2001) ENETDOWN Netzwerk ausser Betrieb (POSIX.1-2001) ENETRESET Verbindungsabbruch durch das Netzwerk (POSIX.1-2001) ENETUNREACH Netzwerk nicht erreichbar (POSIX.1-2001) ENFILE Zu viele offene Dateien (POSIX.1-2001). Unter Linux ist dies wahrscheinlich ein Ergebnis der Beschrankung /proc/sys/fs/file-max (siehe proc(5)). ENOANO Keine Anode ENOBUFS Kein Platz fur Puffer verfugbar (POSIX.1 (XSI-STREAMS-Option)) ENODATA Das benannte Attribut existiert nicht oder der Prozess hat keinen Zugriff auf dieses Attribut; siehe xattr(7). In POSIX.1-2001 (Option >>XSI STREAMS<<) wurde dieser Fehler als >>No message is available on the STREAM head read queue<< beschrieben. ENODEV Kein solches Gerat vorhanden (POSIX.1-2001) ENOENT Keine solche Datei oder kein solches Verzeichnis vorhanden (POSIX.1-2001) Typischerweise tritt dieser Fehler auf, wenn der angegebene Pfadname nicht existiert, einer der Komponenten in dem Verzeichnisprafix eines Pfadnamens nicht existiert oder der angegebene Pfadname ein hangender symbolischer Link ist. ENOEXEC Fehler im Format der Programmdatei (POSIX.1-2001) ENOKEY Erforderlicher Schlussel nicht verfugbar ENOLCK Keine Sperren verfugbar (POSIX.1-2001) ENOLINK Link wurde abgetrennt (POSIX.1-2001) ENOMEDIUM Kein Medium gefunden ENOMEM Nicht genugend Platz/Nicht genugend Hauptspeicher verfugbar (POSIX.1-2001) ENOMSG Keine Nachricht vom gewunschten Typ (POSIX.1-2001) ENONET Machine ist nicht an das Netzwerk angeschlossen ENOPKG Paket nicht installiert ENOPROTOOPT Protokoll nicht verfugbar (POSIX.1-2001) ENOSPC Auf dem Gerat ist kein Speicherplatz mehr verfugbar (POSIX.1-2001) ENOSR Keine STREAM-Ressourcen (POSIX.1 (Option XSI STREAMS)) ENOSTR Ist kein STREAM (POSIX.1 (XSI-STREAMS-Option)) ENOSYS Funktion nicht implementiert (POSIX.1-2001) ENOTBLK Blockgerat erforderlich ENOTCONN Der Socket ist nicht verbunden (POSIX.1-2001) ENOTDIR Ist kein Verzeichnis (POSIX.1-2001) ENOTEMPTY Das Verzeichnis ist nicht leer (POSIX.1-2001) ENOTRECOVERABLE Zustand nicht wiederherstellbar (POSIX.1-2008) ENOTSOCK Ist kein Socket (POSIX.1-2001) ENOTSUP Aktion wird nicht unterstutzt (POSIX.1-2001) ENOTTY Unpassende E/A-Steuerungsaktion (POSIX.1-2001) ENOTUNIQ Name ist im Netzwerk nicht eindeutig ENXIO Kein solches Gerat/Adresse (POSIX.1-2001) EOPNOTSUPP Aktion fur Sockets nicht unterstutzt (POSIX.1-2001) (ENOTSUP und EOPNOTSUPP haben auf Linux den gleichen Wert, gemass POSIX.1 sollten diese Fehlerwerte unterschiedlich sein.) EOVERFLOW Wert zu gross fur Speicherung im Datentyp (POSIX.1-2001) EOWNERDEAD Eigentumer verstarb (POSIX.1-2008) EPERM Aktion nicht gestattet (POSIX.1-2001) EPFNOSUPPORT Protokollfamilie nicht unterstutzt EPIPE Pipe unterbrochen (POSIX.1-2001) EPROTO Protokollfehler (POSIX.1-2001) EPROTONOSUPPORT Protokoll nicht unterstutzt (POSIX.1-2001) EPROTOTYPE Falscher Protokolltyp fur Socket (POSIX.1-2001) ERANGE Ergebnis zu gross (POSIX.1, C99) EREMCHG Adresse in der Ferne geandert EREMOTE Objekt ist in der Ferne/nicht lokal EREMOTEIO E/A-Fehler in der Ferne ERESTART Unterbrochener Systemaufruf sollte erneut gestart werden ERFKILL Aktion aufgrund von RF-Kill nicht moglich EROFS Nur-lesbares Dateisystem (POSIX.1-2001) ESHUTDOWN Senden nach Herunterfahren des Transport-Endpunktes nicht moglich ESPIPE Ungultiger Seek (POSIX.1-2001) ESOCKTNOSUPPORT Socket-Typ nicht unterstutzt ESRCH Kein solcher Prozess vorhanden (POSIX.1-2001) ESTALE Veraltete Dateizugriffsnummer (file handle) (POSIX.1-2001) Dieser Fehler kann fur NFS- und fur andere Dateisysteme auftreten. ESTRPIPE Stream-Pipe-Fehler ETIME Timer abgelaufen (POSIX.1 (XSI-STREAMS-Option)) (POSIX.1 nennt das >>STREAM ioctl(2)-Zeituberschreitung<<) ETIMEDOUT Verbindung ist abgelaufen (POSIX.1-2001) ETOOMANYREFS Zu viele Referenzen: Zusammenfugen nicht moglich ETXTBSY Textdatei belegt (POSIX.1-2001) EUCLEAN Struktur muss aufgeraumt werden EUNATCH Kein zugeordneter Treiber fur Protokoll EUSERS Zu viele Benutzer EWOULDBLOCK Aktion wurden blockieren (kann der gleiche Wert wie EAGAIN sein) (POSIX.1-2001) EXDEV Ungultiger Gerate-Querverweis (POSIX.1-2001) EXFULL Austausch/Vermittlungsstelle voll ANMERKUNGEN Ein verbreiteter Programmierfehler ist if (somecall() == -1) { printf("somecall() fehlgeschlagen\n"); if (errno == ) { } } Hier muss errno nicht mehr den Wert haben, den er bei der Ruckkehr aussomecall() hatte. (D.h., der Wert konnte durch den Aufruf von printf(3) verandert werden). Wenn der Wert von errno uber einen Bibliotheksaufruf erhalten bleiben soll, muss er gespeichert werden: if (somecall() == -1) { int errsv = errno; printf("somecall() fehlgeschlagen\n"); if (errsv == ...) { ... } } Beachten Sie, dass POSIX-Thread-APIs errno im Fehlerfall nicht setzen. Stattdessen liefern sie im Fehlerfall eine Fehlernummer als Funktionsergebnis zuruck. Diese Fehlernummern haben die gleichen Bedeutungen wie die in errno durch andere APIs zuruckgelieferten Fehlernummern. Bei einigen Uraltsystemen war nicht vorhanden oder deklarierte errno nicht, so dass eine manuelle Deklaration von errno notwendig war (d.h. extern int errno). Machen Sie das nicht. Das ist schon seit langer Zeit nicht mehr notwendig und wird bei modernen Versionen der C-Bibliothek zu Problemen fuhren. SIEHE AUCH errno(1), err(3), error(3), perror(3), strerror(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 errno(3)