Scroll to navigation

READ(2) Linux-Programmierhandbuch READ(2)

BEZEICHNUNG

read - aus einem Dateideskriptor lesen

ÜBERSICHT

#include <unistd.h>
 
ssize_t read(int fd, void *buf, size_t count);

BESCHREIBUNG

read() versucht, bis zu count Byte aus dem Dateideskriptor fd in den bei buf beginnenden Puffer zu lesen.
Falls count numerisch Null ist, liefert read() numerisch Null zurück und hat kein weiteres Ergebnis. Falls count größer als SSIZE_MAX ist, ist das Ergebnis nicht spezifiziert.

RÜCKGABEWERT

Bei Erfolg wird die Anzahl der gelesenen Bytes zurückgegeben (null bedeutet Dateiende) und die Position in der Datei wird um diese Anzahl erhöht. Es ist kein Fehler, wenn diese Zahl kleiner ist als die Zahl der angeforderten Bytes; das kann geschehen, wenn gerade wirklich weniger Bytes verfügbar sind (vielleicht ist das Dateiende nah oder es wird aus einer Pipeline oder von einem Terminal gelesen) oder weil read() durch ein Signal unterbrochen wurde. Im Fehlerfall wird -1 zurückgegeben und errno wird entsprechend gesetzt. In diesem Fall ist nicht festgelegt, ob die Position in der Datei (wenn es überhaupt eine gibt) geändert wird.

FEHLER

EAGAIN
Der Dateideskriptor fd bezieht sich auf eine Datei, die kein Socket ist, und wurde als nicht blockierend ( O_NONBLOCK) markiert und das Lesen würde blockieren.
EAGAIN oder EWOULDBLOCK
Der Dateideskriptor fd bezieht sich auf ein Socket und wurde als nicht blockierend ( O_NONBLOCK) markiert und das Lesen würde blockieren. POSIX.1-2001 erlaubt in diesem Fall, dass eine der beiden Fehlermeldungen zurückgeliefert wird und verlangt nicht, dass beide Konstanten den gleichen Wert haben. Daher sollten portable Anwendungen auf beide Möglichkeiten prüfen.
EBADF
fd ist kein gültiger Deskriptor oder ist nicht zum Lesen geöffnet.
EFAULT
buf liegt außerhalb Ihres adressierbaren Adressraums.
EINTR
Der Aufruf wurde durch ein Signal unterbrochen, bevor Daten gelesen wurden; siehe signal(7).
EINVAL
fd ist einem Objekt zugeordnet, aus dem nicht gelesen werden kann; oder die Datei wurde mit dem Schalter O_DIRECT geöffnet und entweder die in buf angegebene Adresse, der in count angegebene Wert oder der aktuelle Datei-Offset sind nicht entsprechend ausgerichtet.
EINVAL
fd wurde über einen Aufruf von timerfd_create(2) erstellt und der falsche Größenpuffer wurde an read() übergeben; siehe timerfd_create(2) für weitere Informationen.
EIO
E/A-Fehler. Dies wird zum Beispiel passieren, wenn der Prozess zu einer Hintergrund-Prozessgruppe gehört und versucht, von seinem steuernden Terminal zu (tty) zu lesen und er entweder B kontrollierenden tty lesen und er entweder SIGTTIN ignoriert oder sperrt oder seine Prozessgruppe verwaist ist. EIO kann auch durch einen Low-Level-E/A-Fehler während des Lesens von einer Platte oder einem Band gesetzt werden.
EISDIR
fd referenziert ein Verzeichnis.
Andere Fehler können auftreten, abhängig von dem Objekt, das mit fd verbunden ist. POSIX erlaubt einem read(), der nach dem Lesen von einigen Daten unterbrochen wurde, -1 zurückzuliefern (mit errno auf EINTR gesetzt) oder die Anzahl der bereits gelesenen Bytes zurückzuliefern.

KONFORM ZU

SVr4, 4.3BSD, POSIX.1-2001.

ANMERKUNGEN

Auf NFS-Dateisystemen aktualisiert das Lesen kleiner Datenmengen den Zeitstempel nur beim ersten Mal, nachfolgende Anrufe können das nicht tun. Dies wird durch das clientseitige »attribute caching« (Zwischenspeichern der Attribute) verursacht, weil die meisten, wenn nicht alle NFS-Clients die Aktualisierung von st_atime (die letzte Zugriffszeit) dem Server überlassen und Leseoperationen auf Clientseite, die aus seinem Cache bedient werden, st_atime nicht aktualisieren, weil nicht vom Server gelesen wird. UNIX-Semantik kann durch Deaktivieren des clientseitigen attribute cachings erhalten werden, aber in den meisten Fällen wird dadurch die Serverlast deutlich erhöht und die Leistung verringert.
Viele Dateisysteme und Platten wurden als schnell genug betrachtet, so dass die Implementierung von O_NONBLOCK als unnötig betrachtet wurde. Daher kann O_NONBLOCK auf Dateien und/oder Platten nicht verfügbar sein.

SIEHE AUCH

close(2), fcntl(2), ioctl(2), lseek(2), open(2), pread(2), readdir(2), readlink(2), readv(2), select(2), write(2), fread(3)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux- man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.
 

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Michael Haardt <michael@moria.de>, Helge Kreutzmann <debian@helgefjell.de> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.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@lists.debian.org>.
23. Februar 2009 Linux