Provided by: manpages-de-dev_1.4-1_all 

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 Null zurückgegeben. 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,
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.
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.
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.
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
This page is part of release 3.54 of the Linux man-pages project. A description of the project, and
information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von 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 27. Januar 2013 WRITE(2)