Manpages

BEZEICHNUNG

errno - Nummer des letzten aufgetretenen Fehlers

ÜBERSICHT

#include <errno.h>

BESCHREIBUNG

Die Header-Datei <errno.h> 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 Rückgabewert 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 ändern. Der Wert von errno wird niemals von irgendeinem Systemaufruf oder einer Bibliotheksfunktion auf Null gesetzt.

Für einige Systemaufrufe und Bibliotheksfunktionen (wie z.B. getpriority(2)) ist -1 ein gültiger Rückgabewert bei erfolgreichem Funktionsaufruf. In solchen Fällen kann eine erfolgreiche von einer fehlgeschlagenen Ausführung der Funktion unterschieden werden, indem vor dem Aufruf errno auf Null gesetzt wird und wenn der Rückgabestatus einen Fehler anzeigt, errno untersucht wird.

Der ISO-C-Standard definiert errno als veränderbaren lvalue des Typs int, der nicht explizit deklariert sein muss; errno darf ein Makro sein. Jeder Thread erhält eine eigene, lokale errno; wird sie in einem Thread gesetzt, wirkt sich das nicht auf ihren Wert in anderen Threads aus.

Fehlernummern und -namen
Gültige Fehlernummer sind alle positiven Zahlen. Die Header-Datei <errno.h> definiert für jeden der möglichen Fehlernummern, die in errno auftreten können, symbolische Namen.

Mit einer Ausnahme müssen alle von POSIX.1 beschriebenen Fehlernamen unterschiedliche Werte haben. EAGAIN und EWOULDBLOCK dürfen 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) können 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 während 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, außer es ist anderweitig angegeben.

*

POSIX.1-2008: Der Name ist in POSIX.1-2008 definiert, war aber nicht in älteren POSIX.1-Standards verfügbar.

*

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 verfügbar (POSIX.1-2001)

EAFNOSUPPORT

Adressfamilie nicht unterstützt (POSIX.1-2001)

EAGAIN

Ressource zeitweise nicht verfügbar (darf der gleiche Wert wie EWOULDBLOCK sein, POSIX.1-2001)

EALREADY

Verbindung ist schon aufgebaut (POSIX.1-2001)

EBADE

Austausch ungültig

EBADF

Schlechter Dateideskriptor (POSIX.1-2001)

EBADFD

Dateideskriptor in schlechtem Zustand

EBADMSG

Ungültige Nachricht (POSIX.1-2001)

EBADR

Ungültiger Anforderungsdeskriptor

EBADRQC

Ungültiger Anforderungscode

EBADSLT

Ungültiger Slot

EBUSY

Gerät oder Ressource beschäftigt/belegt (POSIX.1-2001)

ECANCELED

Aktion abgebrochen (POSIX.1-2001)

ECHILD

Keine Kindprozesse (POSIX.1-2001)

ECHRNG

Kanalnummer außerhalb des zulässigen Bereichs

ECOMM

Kommunikationsfehler beim Senden

ECONNABORTED

Verbindung abgebrochen (POSIX.1-2001)

ECONNREFUSED

Verbindung abgelehnt (POSIX.1-2001)

ECONNRESET

Verbindung zurückgesetzt (POSIX.1-2001)

EDEADLK

Verklemmung beim Zugriff auf eine Resource (deadlock) vermieden (POSIX.1-2001)

EDEADLOCK

Auf den meisten Architekturen ein Synonym für 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 außerhalb des Definitionsbereichs (POSIX.1, C99)

EDQUOT

Festplattenkontingent (disk quota) überschritten (POSIX.1-2001)

EEXIST

Datei schon vorhanden (POSIX.1-2001)

EFAULT

Ungültige Adresse (POSIX.1-2001)

EFBIG

Datei zu groß (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

Ungültiger oder unvollständiger Multibyte oder weites Zeichen (POSIX.1, C99)

Der hier gezeigte Text ist eine Glibc-Fehlerbeschreibung: in POSIX.1 wird dieser Fehler als »Ungültige Byte-Sequenz« beschrieben.

EINPROGRESS

Aktion wird gerade ausgeführt (POSIX.1-2001)

EINTR

Unterbrochener Funktionsaufruf (POSIX.1-2001); siehe signal(7)

EINVAL

Ungültiges 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

Schlüssel ist abgelaufen

EKEYREJECTED

Schlüssel wurde vom Dienst zurückgewiesen

EKEYREVOKED

Schlüssel wurde widerrufen

EL2HLT

Stufe 2 angehalten

EL2NSYNC

Stufe 2 nicht synchronisiert

EL3HLT

Stufe 3 angehalten

EL3RST

Stufe 3 zurückgesetzt

ELIBACC

Zugriff auf notwendige Laufzeitbibliothek nicht möglich

ELIBBAD

Zugriff auf eine beschädigte Laufzeitbibliothek

ELIBMAX

Versuch, zu viele Laufzeitbibliotheken zu linken

ELIBSCN

Abschnitt .lib in a.out defekt

ELIBEXEC

Eine Laufzeitbibliothek kann nicht direkt ausgeführt werden

ELNRANGE

Link-Nummer außerhalb des zulässigen 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 Überschreiten der in getrlimit(2) beschriebenen Ressourcenbegrenzung RLIMIT_NOFILE hervorgerufen

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 außer 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 Beschränkung /proc/sys/fs/file-max (siehe proc(5)).

ENOANO

Keine Anode

ENOBUFS

Kein Platz für Puffer verfügbar (POSIX.1 (XSI-STREAMS-Option))

ENODATA

Im STREAM-Head der Lese-Warteschlange ist keine Nachricht verfügbar (POSIX.1-2001)

ENODEV

Kein solches Gerät 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 Verzeichnispräfix eines Pfadnamens nicht existiert oder der angegebene Pfadname ein hängender symbolischer Link ist.

ENOEXEC

Fehler im Format der Programmdatei (POSIX.1-2001)

ENOKEY

Erforderlicher Schlüssel nicht verfügbar

ENOLCK

Keine Sperren verfügbar (POSIX.1-2001)

ENOLINK

Link wurde abgetrennt (POSIX.1-2001)

ENOMEDIUM

Kein Medium gefunden

ENOMEM

Nicht genügend Platz/Nicht genügend Hauptspeicher verfügbar (POSIX.1-2001)

ENOMSG

Keine Nachricht vom gewünschten Typ (POSIX.1-2001)

ENONET

Machine ist nicht an das Netzwerk angeschlossen

ENOPKG

Paket nicht installiert

ENOPROTOOPT

Protokoll nicht verfügbar (POSIX.1-2001)

ENOSPC

Auf dem Gerät ist kein Speicherplatz mehr verfügbar (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

Blockgerät 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 unterstützt (POSIX.1-2001)

ENOTTY

Unpassende E/A-Steuerungsaktion (POSIX.1-2001)

ENOTUNIQ

Name ist im Netzwerk nicht eindeutig

ENXIO

Kein solches Gerät/Adresse (POSIX.1-2001)

EOPNOTSUPP

Aktion für Sockets nicht unterstützt (POSIX.1-2001)

(ENOTSUP und EOPNOTSUPP haben auf Linux den gleichen Wert, gemäß POSIX.1 sollten diese Fehlerwerte unterschiedlich sein.)

EOVERFLOW

Wert zu groß für Speicherung im Datentyp (POSIX.1-2001)

EOWNERDEAD

Eigentümer verstarb (POSIX.1-2008)

EPERM

Aktion nicht gestattet (POSIX.1-2001)

EPFNOSUPPORT

Protokollfamilie nicht unterstützt

EPIPE

Pipe unterbrochen (POSIX.1-2001)

EPROTO

Protokollfehler (POSIX.1-2001)

EPROTONOSUPPORT

Protokoll nicht unterstützt (POSIX.1-2001)

EPROTOTYPE

Falscher Protokolltyp für Socket (POSIX.1-2001)

ERANGE

Ergebnis zu groß (POSIX.1, C99)

EREMCHG

Adresse in der Ferne geändert

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 möglich

EROFS

Nur-lesbares Dateisystem (POSIX.1-2001)

ESHUTDOWN

Senden nach Herunterfahren des Transport-Endpunktes nicht möglich

ESPIPE

Ungültiger Seek (POSIX.1-2001)

ESOCKTNOSUPPORT

Socket-Typ nicht unterstützt

ESRCH

Kein solcher Prozess vorhanden (POSIX.1-2001)

ESTALE

Veraltete Dateizugriffsnummer (file handle) (POSIX.1-2001)

Dieser Fehler kann für NFS- und für andere Dateisysteme auftreten.

ESTRPIPE

Stream-Pipe-Fehler

ETIME

Timer abgelaufen (POSIX.1 (XSI-STREAMS-Option))

(POSIX.1 nennt das »STREAM ioctl(2)-Zeitüberschreitung«)

ETIMEDOUT

Verbindung ist abgelaufen (POSIX.1-2001)

ETOOMANYREFS

Zu viele Referenzen: Zusammenfügen nicht möglich

ETXTBSY

Textdatei belegt (POSIX.1-2001)

EUCLEAN

Struktur muss aufgeräumt werden

EUNATCH

Kein zugeordneter Treiber für Protokoll

EUSERS

Zu viele Benutzer

EWOULDBLOCK

Aktion würden blockieren (kann der gleiche Wert wie EAGAIN sein) (POSIX.1-2001)

EXDEV

Ungültiger Link (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 Rückkehr aussomecall() hatte. (D.h., der Wert konnte durch den Aufruf von printf(3) verändert werden). Wenn der Wert von errno über einen Bibliotheksaufruf erhalten bleiben soll, muss er gespeichert werden:

if (somecall() == -1) {
    int errsv = errno;
    printf("somecall() fehlgeschlagen\n");
    if (errsv == ...) { ... }
}

Bei einigen Uraltsystemen war <errno.h> 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 führen.

SIEHE AUCH

errno(1), err(3), error(3), perror(3), strerror(3)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 5.07 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer [AT] gmx.de>, Mario Blättermann <mario.blaettermann [AT] gmail.com> und Helge Kreutzmann <debian [AT] helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german [AT] lists.org>.