.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" and Copyright (C) 1993 Michael Haardt, Ian Jackson. .\" and Copyright (C) 2007 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Sat Jul 24 13:35:59 1993 by Rik Faith .\" Modified Sun Nov 28 17:19:01 1993 by Rik Faith .\" Modified Sat Jan 13 12:58:08 1996 by Michael Haardt .\" .\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer .\" 2001-12-13 added remark by Zack Weinberg .\" 2007-06-18 mtk: .\" Added details about seekable files and file offset. .\" Noted that write() may write less than 'count' bytes, and .\" gave some examples of why this might occur. .\" Noted what happens if write() is interrupted by a signal. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH WRITE 2 "2. Februar 2018" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG write \- in einen Dateideskriptor schreiben .SH ÜBERSICHT \fB#include \fP .PP \fBssize_t write(int \fP\fIfd\fP\fB, const void *\fP\fIbuf\fP\fB, size_t \fP\fIcount\fP\fB);\fP .SH BESCHREIBUNG \fBwrite\fP() versucht \fIcount\fP Byte aus dem Puffer, auf bei \fIbuf\fP beginnt, in die Datei zu schreiben, auf die der Dateideskriptor \fIfd\fP weist. .PP Die Anzahl der geschriebenen Bytes kann geringer als \fIcount\fP sein, wenn es beispielsweise nicht genügend Platz auf dem zugrunde liegenden physischen Medium gibt oder die \fBRLIMIT_FSIZE\fP\-Ressourcenbeschränkung erreicht wird (siehe \fBsetrlimit\fP(2)) oder der Aufruf von einem Signal Handler nach weniger als \fIcount\fP geschriebenen Bytes unterbrochen wurde. (Siehe auch \fBpipe\fP(7)) .PP Für eine Datei, auf die \fBlseek\fP(2) angewendet werden kann, (z. B. eine normale Datei) erfolgt das Schreiben am Datei\-Offset. Dabei wird der Datei\-Offset um die Anzahl der tatsächlich geschriebenen Bytes erhöht. Wenn die Datei mit \fBopen\fP(2) und der Option \fBO_APPEND\fP geöffnet wurde, wird der Datei\-Offset vor dem ersten Schreiben auf das Dateiende gesetzt. Die Einstellung des Datei\-Offsets und die Schreibaktion werden als eine unteilbare (atomare) Aktion durchgeführt. .PP POSIX fordert, dass ein nachweisbar nach der Rückkehr von \fBwrite\fP() liegendes \fBread\fP(2) die neuen Daten liefert. Es sollte jedoch beachtet werden, dass nicht alle Dateisysteme zu POSIX konform sind. .PP Laut POSIX.1 hängt das Ergebnis von der Implementierung ab, falls \fIcount\fP größer als \fBSSIZE_MAX\fP ist; siehe ANMERKUNGEN für die Obergrenze unter Linux. .SH 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. .PP Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .PP Wenn \fIcount\fP gleich Null ist und \fIfd\fP auf eine normale Datei verweist, kann \fBwrite\fP() 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 \fIcount\fP gleich Null ist und \fIfd\fP sich nicht auf eine normale Datei bezieht, sind die Ergebnisse nicht festgelegt. .SH FEHLER .TP \fBEAGAIN\fP Der Dateideskriptor \fIfd\fP verweist auf eine Datei, die kein Socket und als nicht blockierend (\fBO_NONBLOCK\fP) gekennzeichnet ist \- die Schreibaktionen würde daher blockieren. Siehe \fBopen\fP(2) für weitere Details über den Schalter \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP oder \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Der Dateideskriptor \fIfd\fP verweist auf einen Socket und wurde als nicht blockierend (\fBO_NONBLOCK\fP) gekennzeichnet \- die Schreibaktion 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. .TP \fBEBADF\fP \fIfd\fP ist kein gültiger Dateideskriptor oder ist nicht zum Schreiben geöffnet. .TP \fBEDESTADDRREQ\fP \fIfd\fP verweist auf einen Datagram Socket, für den nicht mit \fBconnect\fP(2) eine Peer\-Adresse gesetzt wurde. .TP \fBEDQUOT\fP Das Benutzerkontingent an Disk\-Blöcken auf dem die Datei enthaltenden Dateisystem, auf welches sich \fIfd\fP bezieht, ist ausgeschöpft. .TP \fBEFAULT\fP \fIbuf\fP liegt außerhalb Ihres adressierbaren Adressraums. .TP \fBEFBIG\fP 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. .TP \fBEINTR\fP Der Aufruf wurde durch ein Signal unterbrochen, bevor irgendwelche Daten geschrieben wurden (siehe \fBsignal\fP(7)). .TP \fBEINVAL\fP \fIfd\fP wurde einem nicht beschreibbaren Objekt zugeordnet oder die Datei wurde mit dem Schalter \fBO_DIRECT\fP geöffnet und entweder die in \fIbuf\fP angegebene Adresse, der in \fIcount\fP angegebene Wert oder der Datei\-Offset ist nicht geeignet ausgerichtet. .TP \fBEIO\fP .\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750 Ein system\-/hardwarenaher Fehler trat beim Verändern der Inode auf. Dieser Fehler kann sich auf das Zurückschreiben von Daten, die durch ein früheres \fBwrite\fP(2) geschrieben wurden, beziehen, welcher sich auf einen anderen Dateideskriptor auf der gleichen Datei bezog. Seit Linux 4.13 kommen Fehler beim Zurückschreiben mit dem Versprechen, dass sie von einer nachfolgenden \fBwrite\fP(2)\-Anfrage berichtet werden \fIkönnen\fP, und dass sie von einem nachfolgenden \fBfsync\fP(2) berichtet \fIwerden\fP (unabhängig davon, ob sie von einem \fBwrite\fP(2) berichtet wurden). Eine andere mögliche Ursache von \fBEIO\fP bei Netzwerkdateisystemen sind empfohlene Sperren, die aus dem Dateideskriptor herausgenommen wurden, und diese Sperre dann verloren gegangen ist. Siehe den Abschnitt \fIVerlorene Sperren\fP von \fBfcntl\fP(2) für weitere Details. .TP \fBENOSPC\fP Das Gerät, welches die Datei enthält, hat keinen Platz für die Daten. .TP \fBEPERM\fP Die Aktion wurde durch eine Dateiversiegelung verhindert; siehe \fBfcntl\fP(2). .TP \fBEPIPE\fP \fIfd\fP ist mit einer Pipe oder einem Socket verbunden, dessen lesendes Ende geschlossen ist. In diesem Fall empfängt der schreibende Prozess auch ein \fBSIGPIPE\fP\-Signal. (Somit wird der Rückgabewert von \fBwrite\fP() nur sichtbar/wirksam/gesehen, wenn das Programm das Signal abfängt, blockiert oder ignoriert.) .PP Abhängig von dem mit \fIfd\fP verbundenen Objekt können andere Fehler auftreten. .SH "KONFORM ZU" .\" SVr4 documents additional error .\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE. SVr4, 4.3BSD, POSIX.1\-2001. .PP Unter SVr4 kann ein Schreiben jederzeit unterbrochen werden und \fBEINTR\fP zurückgeben, nicht nur vor dem Schreiben von Daten. .SH ANMERKUNGEN Die Typen \fIsize_t\fP und \fIssize_t\fP sind, respektive, vorzeichenlose und vorzeichenbehaftete Ganzzahldatentypen, wie durch POSIX.1 spezifiziert. .PP Eine erfolgreiche Rückkehr aus \fBwrite\fP() garantiert nicht, dass Daten an die Festplatte übergeben wurden. Auf einigen Dateisystemen, darunter NFS, garantiert es nicht einmal, dass der Speicher für die Daten erfolgreich reserviert wurde. In diesem Fall können einige Fehler bis zu einem späteren \fBwrite\fP(2), \fBfsync\fP(2) oder sogar \fBclose\fP(2) verzögert werden. Der einzig sichere Weg ist der Aufruf von \fBfsync\fP(2), nachdem Sie alle Ihre Daten geschrieben haben. .PP Wenn ein \fBwrite\fP() von einem Signal\-Handler unterbrochen wird, bevor irgendwelche Bytes geschrieben wurden, wird der Auruf mit dem Fehler \fBEINTR\fP enden. Wird das \fBwrite\fP() unterbrochen, nachdem mindestens ein Byte geschrieben wurde, kehrt die Funktion erfolgreich zurück und der Rückgabewert ist die Anzahl der geschriebenen Bytes. .PP .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 Unter Linux wird \fBwrite\fP() (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. .SH FEHLER Laut POSIX.1\-2008/SUSv4 Abschnitt XSI 2.9.7 (»Thread Interactions with Regular File Operations«): .PP .RS 4 Alle der folgenden Funktionen müssen im Hinblick aufeinander atomar bezüglich der in POSIX.1\-2008 angegebenen Effekte sein, wenn sie auf regulären Dateien oder symbolischen Links arbeiten: … .RE .PP .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages gmail.com> .\" Subject: Update of file offset on write() etc. is non-atomic with I/O .\" Date: 2014-02-17 15:41:37 GMT .\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems .\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4 .\" Author: Linus Torvalds .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX Unter den im Folgenden aufgeführten APIs sind \fBwrite\fP() und \fBwritev\fP(2). Und unter den Effekten, die über Threads (und Prozesse) hinweg atomar sein sollten, ist die Aktualisierung des Dateiversatzes. Unter Linux vor Version 3.14 war das allerdings nicht der Fall: Falls zwei Prozesse, die eine offene Dateideskription gemeinsam nutzten (siehe \fBopen\fP(2)) gleichzeitig einen \fBwrite\fP() (oder \fBwritev\fP(2)) durchführten, waren die E/A\-Aktionen im Hinblick auf die Aktualisierung des Dateiversatzes nicht atomar. Das Ergebnis war, dass die ausgegebenen Datenblöcken in den zwei Prozessen sich (inkorrekterweise) überlappten. Dieses Problem wurde in Linux 3.14 behoben. .SH "SIEHE AUCH" \fBclose\fP(2), \fBfcntl\fP(2), \fBfsync\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpwrite\fP(2), \fBread\fP(2), \fBselect\fP(2), \fBwritev\fP(2), \fBfwrite\fP(3) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.16 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Mario Blättermann und Helge Kreutzmann 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 .