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