Provided by: manpages-de-dev_1.11-1_all bug

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.

       Bei  Dateien,  die  das  Durchsuchen unterstützen, beginnt der Lesevorgang am Offset der aktuellen Datei,
       wobei der Datei-Offset durch die Anzahl der gelesenen Bytes erhöht wird. Falls der Datei-Offset  am  Ende
       oder hinter dem Ende der Datei liegt, werden keine Bytes gelesen und read() gibt Null zurück.

       Falls  count Null ist, kann read() eventuell die nachfolgend beschriebenen Fehler erkennen. Ohne jegliche
       Fehlermeldungen, oder wenn read() nicht auf Fehler prüft, gibt ein Aufruf von read()  und  wenn  count  0
       ist, Null zurück und hat keine weiteren Auswirkungen.

       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. Siehe auch ANMERKUNGEN.

       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. Siehe open(2) für weitere
              Details über den Schalter O_NONBLOCK.

       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 lesen und  er  entweder  SIGTTIN  ignoriert
              oder  sperrt  oder seine Prozessgruppe verwaist ist. Es 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

       Unter Linux wird read() (und ähnliche Systemaufrufe) höchstens 0x7ffff000 (2.147.479.552) Byte übertragen
       und die Anzahl der tatsächlich übertragenen Bytes zurückliefern. Dies trifft sowohl auf 32- als auch  auf
       64-Bit-Systemen zu.

       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.

FEHLER

       Laut POSIX.1-2008/SUSv4 Abschnitt XSI 2.9.7 (»Thread Interactions with Regular File Operations«):

           Alle der folgenden Funktionen sollen im Hinblick aufeinander atomar  bezüglich  der  in  POSIX.1-2008
           angegebenen Effekte sein, wenn sie auf regulären Dateien oder symbolischen Links arbeiten: …

       Among  the APIs subsequently listed are read()  and readv(2). And among the effects that should be atomic
       across threads (and processes)  are updates of the file offset. However, on Linux  before  version  3.14,
       this  was  not  the  case:  if two processes that share an open file description (see open(2))  perform a
       read()  (or readv(2))  at the same time, then the I/O operations were not atomic  with  respect  updating
       the  file  offset, with the result that the reads in the two processes might (incorrectly) overlap in the
       blocks of data that they obtained. This problem was fixed in Linux 3.14.

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  4.04  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 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>,   Martin   Eberhard   Schauer  <Martin.E.Schauer@gmx.de>  und  Mario
       Blättermann <mario.blaettermann@gmail.com> 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>.

Linux                                             23. Juli 2015                                          READ(2)