ERRNO(3)

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, muß 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 muß; 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 1996) 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 (Ungültiges oder unvollständiges Multi-Byte oder Wide-Zeichen).

E2BIG
    Die Argumentliste ist zu lang

EACCES
    Keine Berechtigung

EAGAIN
    Die Resource ist zurzeit nicht verfügbar

EBADF
    Ungültiger Dateideskriptor

EBADMSG
    Ungültige Nachricht

EBUSY
    Das Gerät oder die Resource ist belegt

ECANCELED
    Operation abgebrochen

ECHILD
    Keine Kind-Prozesse

EDEADLK
    Verklemmung beim Zugriff auf eine Resource vermieden

EDOM
    Das numerische Argument ist außerhalb des Definitionsbereiches

EEXIST
    Die Datei existiert bereits

EFAULT
    Ungültige Adresse

EFBIG
    Die Datei ist zu groß

EINPROGRESS
    Die Operation ist jetzt in Bearbeitung

EINTR
    Unterbrechung während des Betriebssystemaufrufs

EINVAL
    Das Argument ist ungültig

EIO Eingabe-/Ausgabefehler

EISDIR
    Ist ein Verzeichnis

EMFILE
    Zu viele offene Dateien

EMLINK
    Zu viele Links

EMSGSIZE
    Die Nachricht ist zu lang

ENAMETOOLONG
    Der Dateiname ist zu lang

ENFILE
    Zu viele offene Dateien im System

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

ENOMEM
    Nicht genügend Hauptspeicher verfügbar

ENOSPC
    Auf dem Gerät ist kein Speicherplatz mehr verfügbar

ENOSYS
    Die angeforderte Funktion ist nicht implementiert

ENOTDIR
    Ist kein Verzeichnis

ENOTEMPTY
    Das Verzeichnis ist nicht leer

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

EPERM
    Die Operation ist nicht erlaubt

EPIPE
    Datenübergabe unterbrochen (broken pipe)

ERANGE
    Das numerische Ergebnis ist außerhalb des gültigen Bereiches

EROFS
    Das Dateisystem ist nur lesbar

ESPIPE
    Nicht erlaubter Seek

ESRCH
    Kein passender Prozeß gefunden

ETIMEDOUT
    Die Wartezeit für die Verbindung ist abgelaufen

EXDEV
    Ungültiger Link über Gerätegrenzen hinweg

Die verschiedenen Unix-Implementierungen geben viele weitere Fehlermeldungen zurück. System V gibt ETXTBSY (Das Programm kann nicht ausgeführt oder verändert werden (busy)) zurück, wenn versucht wird, exec() auf einer Datei aufzurufen, die zum Schreiben geöffnet ist. Linux gibt diesen Fehler ebenfalls zurück, wenn der Versuch unternommen wird, eine Datei sowohl mit VM_DENYWRITE in den Speicher abzubilden als auch zum Schreiben zu öffnen.

SIEHE AUCH
perror(3), strerror(3).