Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
write - in einen Dateideskriptor schreiben
"UBERSICHT
#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 genugend Platz auf dem zugrunde liegenden
physischen Medium gibt oder die RLIMIT_FSIZE-Ressourcenbeschrankung
erreicht wird (siehe setrlimit(2)) oder der Aufruf von einem Signal
Handler nach weniger als count geschriebenen Bytes unterbrochen wurde.
(siehe auch pipe(7))
Fur 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 tatsachlich geschriebenen Bytes
erhoht. Wenn die Datei mit open(2) und der Option O_APPEND geoffnet
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 durchgefuhrt.
POSIX fordert, dass ein nachweisbar nach der Ruckkehr von write()
liegendes read(2) die neuen Daten liefern muss. Es sollte jedoch
beachtet werden, dass nicht alle Dateisysteme zu POSIX konform sind.
R"UCKGABEWERT
Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1
zuruckgegeben und errno entsprechend gesetzt.
Wenn count gleich Null ist und fd auf eine normale Datei verweist, kann
write() einen Fehlerstatus zuruckgeben, falls einer der nachfolgenden
Fehler erkannt wird. Wenn keine Fehler festgestellt werden, wird 0
zuruckgegeben, 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 wurde daher blockieren.
EAGAIN oder EWOULDBLOCK
Der Dateideskriptor fd verweist auf einen Socket und wurde als
nicht blockierend (O_NONBLOCK) gekennzeichnet - die
Schreiboperation wurde daher blockieren. POSIX.1-2001 lasst fur
diesen Fall beide Fehlerstati zu und fordert nicht, dass beide
Konstanten den gleichen Wert haben. Eine portable Anwendung
sollte daher beide Moglichkeiten prufen.
EBADF fd ist kein gultiger Dateideskriptor oder ist nicht zum
Schreiben geoffnet.
EDESTADDRREQ
fd verweist auf einen Datagram Socket, fur den nicht mit
connect(2) eine Peer-Adresse gesetzt wurde.
EFAULT buf liegt auBerhalb Ihres adressierbaren Adressraums.
EFBIG Es wurde versucht, in eine Datei zu schreiben, die die
implementations- oder prozessspezifische maximale DateigroBe
uberschreitet oder der maximal zulassige Offset wurde
uberschritten.
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 geoffnet 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 auf.
ENOSPC Das Gerat, welches die Datei enthalt, hat keinen Platz fur die
Daten.
EPIPE fd ist mit einer Pipe oder einem Socket verbunden, dessen
lesendes Ende geschlossen ist. In diesem Fall empfangt der
schreibende Prozess auch ein SIGPIPE-Signal. (Somit wird der
Ruckgabewert von write() nur sichtbar/wirksam/gesehen, wenn das
Programm das Signal abfangt, blockiert oder ignoriert.)
Abhangig von dem mit fd verbundenen Objekt konnen weitere Fehler
auftreten.
KONFORM ZU
SVr4, 4.3BSD, POSIX.1-2001.
Unter SVr4 kann ein Schreiben jederzeit unterbrochen werden und EINTR
zuruckgeben, nicht nur vor dem Schreiben von Daten.
ANMERKUNGEN
Eine erfolgreiche Ruckkehr aus write() garantiert nicht, dass Daten an
die Festplatte ubergeben wurden. In der Tat garantiert es auf einigen
fehlerhaften Implementierungen nicht einmal, dass der Speicher fur 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 zuruck und der
Ruckgabewert 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
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schauer
<Martin.E.Schauer@gmx.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.