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

BEZEICHNUNG

       write - in einen Dateideskriptor schreiben

ÜBERSICHT

       #include <unistd.h>

       ssize_t write(int fd, const void *buf, size_t count);

BESCHREIBUNG

       write()  versucht  count  Byte  aus dem Puffer, auf den buf zeigt, in die Datei zu schreiben, auf die der
       Dateideskriptor fd weist.

       Die Anzahl der geschriebenen Bytes kann geringer als count sein, wenn es  beispielsweise  nicht  genügend
       Platz  auf  dem  zugrunde  liegenden  physischen Medium gibt oder die RLIMIT_FSIZE-Ressourcenbeschränkung
       erreicht wird (siehe setrlimit(2)) oder der Aufruf von  einem  Signal  Handler  nach  weniger  als  count
       geschriebenen Bytes unterbrochen wurde. (siehe auch pipe(7))

       Für  eine  Datei,  auf  die  lseek(2)  angewendet  werden  kann,  ( z. B. eine normale Datei) erfolgt das
       Schreiben am  aktuellen  Datei-Offset.  Dabei  wird  der  Datei-Offset  um  die  Anzahl  der  tatsächlich
       geschriebenen  Bytes  erhöht. Wenn die Datei mit open(2) und der Option O_APPEND geöffnet wurde, wird der
       Datei-Offset vor dem ersten Schreiben auf das Dateiende gesetzt. Die Einstellung  des  Datei-Offsets  und
       die Schreiboperation werden als eine unteilbare (atomare) Operation durchgeführt.

       POSIX  fordert,  dass  ein  nachweisbar  nach  der Rückkehr von write() liegendes read(2) die neuen Daten
       liefern muss. Es sollte jedoch beachtet werden, dass nicht alle Dateisysteme zu POSIX konform sind.

RÜCKGABEWERT

       Bei Erfolg wird die Anzahl der tatsächlich geschriebenen Bytes zurückgegeben (Null bedeutet, dass  nichts
       geschrieben  wurde).  Es ist kein Fehler, falls diese Zahl kleiner als die Anzahl der angeforderten Bytes
       ist. Dies kann beispielsweise passieren, falls die Platte gefüllt war. Siehe auch HINWEISE.

       Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

       Wenn count gleich Null ist und fd auf eine  normale  Datei  verweist,  kann  write()  einen  Fehlerstatus
       zurückgeben,  falls  einer  der  nachfolgenden Fehler erkannt wird. Wenn keine Fehler festgestellt werden
       oder keine Fehlererkennung durchgeführt wird, wird 0 zurückgegeben, ohne dass  Nebenwirkungen  eintreten.
       Wenn  count  gleich  Null ist und fd sich nicht auf eine normale Datei bezieht, sind die Ergebnisse nicht
       festgelegt.

FEHLER

       EAGAIN Der Dateideskriptor fd verweist auf  eine  Datei,  die  kein  Socket  und  als  nicht  blockierend
              (O_NONBLOCK)  gekennzeichnet  ist - die Schreiboperation würde daher blockieren. Siehe open(2) für
              weitere Details über den Schalter O_NONBLOCK.

       EAGAIN oder EWOULDBLOCK
              Der Dateideskriptor fd verweist auf einen Socket und  wurde  als  nicht  blockierend  (O_NONBLOCK)
              gekennzeichnet  -  die Schreiboperation würde daher blockieren. POSIX.1-2001 lässt für diesen Fall
              beide Fehlerstati zu und fordert nicht, dass  beide  Konstanten  den  gleichen  Wert  haben.  Eine
              portable Anwendung sollte daher beide Möglichkeiten prüfen.

       EBADF  fd ist kein gültiger Dateideskriptor oder ist nicht zum Schreiben geöffnet.

       EDESTADDRREQ
              fd  verweist  auf  einen  Datagram  Socket, für den nicht mit connect(2) eine Peer-Adresse gesetzt
              wurde.

       EDQUOT Das Benutzerkontingent an Disk-Blöcken auf dem die Datei  enthaltenden  Dateisystem,  auf  welches
              sich fd bezieht, ist ausgeschöpft.

       EFAULT buf liegt außerhalb Ihres adressierbaren Adressraums.

       EFBIG  Es  wurde  versucht,  in eine Datei zu schreiben, die die implementations- oder prozessspezifische
              maximale Dateigröße überschreitet oder der maximal zulässige Offset wurde überschritten.

       EINTR  Der Aufruf wurde durch ein Signal unterbrochen, bevor irgendwelche Daten geschrieben wurden (siehe
              signal(7)).

       EINVAL fd wurde einem nicht beschreibbaren Objekt zugeordnet  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 ist nicht geeignet ausgerichtet.

       EIO    Bei der Bearbeitung des Inodes trat ein system-/hardwarenaher E/A-Fehler (engl. I/O) auf.

       ENOSPC Das Gerät, welches die Datei enthält, hat keinen Platz für die Daten.

       EPERM  The operation was prevented by a file seal; see fcntl(2).

       EPIPE  fd ist mit einer Pipe oder einem Socket verbunden, dessen lesendes Ende geschlossen ist. In diesem
              Fall empfängt der schreibende Prozess auch ein SIGPIPE-Signal. (Somit wird  der  Rückgabewert  von
              write()  nur  sichtbar/wirksam/gesehen,  wenn  das  Programm  das  Signal  abfängt, blockiert oder
              ignoriert.)

       Abhängig von dem mit fd verbundenen Objekt können weitere Fehler auftreten.

KONFORM ZU

       SVr4, 4.3BSD, POSIX.1-2001.

       Unter SVr4 kann ein Schreiben jederzeit unterbrochen werden und EINTR  zurückgeben,  nicht  nur  vor  dem
       Schreiben von Daten.

ANMERKUNGEN

       Eine  erfolgreiche  Rückkehr aus write() garantiert nicht, dass Daten an die Festplatte übergeben wurden.
       In der Tat garantiert es auf einigen fehlerhaften Implementierungen nicht einmal, dass der  Speicher  für
       die  Daten  erfolgreich reserviert wurde. Der einzig sichere Weg ist der Aufruf von fsync(2), nachdem Sie
       alle Ihre Daten geschrieben haben.

       Wenn ein write() von einem Signal-Handler unterbrochen wird, bevor irgendwelche Bytes geschrieben wurden,
       wird der Auruf mit dem Fehler EINTR enden. Wird das write() unterbrochen,  nachdem  mindestens  ein  Byte
       geschrieben  wurde,  kehrt  die  Funktion  erfolgreich  zurück  und  der  Rückgabewert ist die Anzahl der
       geschriebenen Bytes.

       Unter  Linux  wird  write()  (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.

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  write()  and writev(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 write()  (or writev(2))  at the same time, then  the  I/O  operations  were  not  atomic  with  respect
       updating  the  file  offset,  with  the  result that the blocks of data output by the two processes might
       (incorrectly) overlap. This problem was fixed in Linux 3.14.

SIEHE AUCH

       close(2), fcntl(2), fsync(2), ioctl(2), lseek(2),  open(2),  pwrite(2),  read(2),  select(2),  writev(2),
       fwrite(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    Martin    Eberhard    Schauer
       <Martin.E.Schauer@gmx.de>,   Mario   Blättermann   <mario.blaettermann@gmail.com>  und  Helge  Kreutzmann
       <debian@helgefjell.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>.

Linux                                             23. Juli 2015                                         WRITE(2)