Available in

(1) (2) (3) (7) (3)/de (3)/es (3)/fr (3)/ja (3)/pl (3)/pt

Contents

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).

COMMENTS

blog comments powered by Disqus