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