.\" -*- 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 .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" 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 "3 avril 2023" "Pages du manuel de Linux 6.05.01" .SH NOM write \- Écrire dans un descripteur de fichier .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBssize_t write(int \fP\fIfd\fP\fB, const void \fP\fIbuf\fP\fB[.\fP\fIcount\fP\fB], size_t \fP\fIcount\fP\fB);\fP .fi .SH DESCRIPTION \fBwrite\fP() écrit au maximum \fIcount\fP octets dans le tampon démarrant à \fIbuf\fP dans le fichier référencé par le descripteur de fichier \fIfd\fP. .PP Le nombre d'octets écrits peut être inférieur à \fIcount\fP par exemple si la place disponible sur le média physique est insuffisante, ou si la limite de ressource \fBRLIMIT_FSIZE\fP est atteinte (consultez \fBsetrlimit\fP(2)), ou l'appel est interrompu par un gestionnaire de signal après avoir écrit moins de \fIcount\fP octets. (Consultez aussi \fBpipe\fP(7).) .PP Pour un fichier sur lequel \fBlseek\fP(2) est possible (par exemple un fichier ordinaire), l'écriture a lieu à la position pointée dans le fichier, et elle est déplacée du nombre d'octets effectivement écrits. Si le fichier était ouvert par \fBopen\fP(2) avec \fBO_APPEND\fP, la position pointée est fixée d'abord à la fin du fichier avant l'écriture. La modification de la position et l'écriture sont effectuées de façon atomique. .PP POSIX réclame qu'une lecture avec \fBread\fP(2) effectuée de façon avérée après le retour d'une écriture avec \fBwrite\fP(), renvoie les nouvelles données. Notez que tous les systèmes de fichiers ne sont pas compatibles avec POSIX. .PP Selon POSIX.1, si \fIcount\fP est supérieur à \fBSSIZE_MAX\fP, le résultat est défini par l'implémentation\ ; consultez NOTES pour la limite supérieure dans Linux. .SH "VALEUR RENVOYÉE" En cas de succès, le nombre d'octets écrits est renvoyé. Si cet appel système échoue, il renvoie \fB\-1\fP et \fIerrno\fP est défini pour indiquer l'erreur. .PP Il faut remarquer qu’un appel \fBwrite\fP() réussi peut transférer moins que \fIcount\fP octets. Ces écritures partielles peuvent se produire pour diverses raisons, par exemple, à cause d’un espace insuffisant dans le périphérique disque pour écrire tous les octets demandés, ou à cause d’un \fBwrite\fP() bloqué pour un socket, un tube ou similaire, était interrompu par un gestionnaire de signal après un transfert partiel, mais avant le transfert de tout les octets demandés. Dans l’éventualité d’une écriture partielle, l’appelant peut faire un autre appel \fBwrite\fP() pour transférer les octets restants. Cet appel consécutif transfère les octets supplémentaires ou peut aboutir à une erreur (par exemple, le disque est désormais rempli). .PP Si \fIcount\fP vaut zéro et si \fIfd\fP correspond à un fichier ordinaire, \fBwrite\fP() peut renvoyer un code d'erreur si l'une des erreurs ci\-dessous est détectée. Si aucune erreur n'est détectée ou si la détection d'erreur n'est pas effectuée, \fB0\fP sera renvoyé sans autre effet. Si \fIcount\fP vaut zéro et \fIfd\fP est un fichier autre qu'un fichier ordinaire, les résultats ne sont pas définis. .SH ERREURS .TP \fBEAGAIN\fP Le descripteur de fichier \fIfd\fP fait référence à un fichier autre qu'un socket et a été marqué comme non bloquant (\fBO_NONBLOCK\fP), et l'écriture devrait bloquer. Consultez \fBopen\fP(2) pour plus de détails sur l'attribut \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP ou \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Le descripteur de fichier \fIfd\fP fait référence à un fichier autre qu'un socket et a été marqué comme non bloquant (\fBO_NONBLOCK\fP), et l'écriture devrait bloquer. POSIX.1\-2001 permet de renvoyer l'une ou l'autre des erreurs dans ce cas et n'exige pas que ces constantes aient la même valeur. Une application portable devrait donc tester les deux possibilités. .TP \fBEBADF\fP \fIfd\fP n'est pas un descripteur de fichier valable, ou n'est pas ouvert en écriture. .TP \fBEDESTADDRREQ\fP \fIfd\fP fait référence à un socket de datagramme pour lequel l'adresse du correspondant n'a pas été initialisée avec \fBconnect\fP(2). .TP \fBEDQUOT\fP Le quota de blocs de disque de l'utilisateur sur le système de fichiers contenant le fichier correspondant à \fIfd\fP a été atteint. .TP \fBEFAULT\fP \fIbuf\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEFBIG\fP Tentative d'écriture d'une plage dépassant la taille maximale d'un fichier définie par l'implémentation ou la limite de taille de fichier du processus, ou bien sur une position au\-delà de celle maximum autorisée. .TP \fBEINTR\fP L'appel système a été interrompu par un signal avant d'avoir pu écrire quoi que ce soit\ ; consultez \fBsignal\fP(7). .TP \fBEINVAL\fP \fIfd\fP correspond à un objet sur lequel il est impossible d'écrire, ou bien le fichier a été ouvert avec l'attribut \fBO_DIRECT\fP, et soit l'adresse définie dans \fIbuf\fP, soit la valeur définie dans \fIcount\fP, soit la position dans le fichier ne sont pas alignées correctement. .TP \fBEIO\fP .\" commit 088737f44bbf6378745f5b57b035e57ee3dc4750 Une erreur d'E/S de bas niveau est survenue pendant la modification de l'inœud. Cette erreur peut être liée à l'écriture en retour de données écrites par un appel de \fBwrite\fP() antérieur qui peut être fournie pour un descripteur de fichier différent sur le même fichier. Depuis Linux\ 4.13, les erreurs à partir des écritures en retour arrivent avec l'annonce qu'elles peuvent être signalées par des requêtes ultérieures de \fBwrite\fP() et seront signalées par un appel de \fBfsync\fP ultérieur (qu'elles aient été ou non signalées par \fBwrite\fP()). Une autre cause de \fBEIO\fP sur des systèmes de fichiers en réseau se produit quand un verrouillage coopératif a été pris sur le descripteur de fichier et qu'il a été perdu. Consultez la section \fIVerrouillages perdus\fP de \fBfcntl\fP(2) pour plus de détails. .TP \fBENOSPC\fP Le périphérique correspondant à \fIfd\fP n'a plus de place disponible. .TP \fBEPERM\fP La lecture a été interrompue par un signal\ ; consultez \fBfnctl\fP(2). .TP \fBEPIPE\fP \fIfd\fP est connecté à un tube (pipe) ou un socket dont l'extrémité de lecture est fermée. Quand cela se produit, le processus écrivain reçoit un signal \fBSIGPIPE\fP. (Ainsi la valeur de retour de \fBwrite\fP n'est vue que si le programme intercepte, bloque ou ignore ce signal.) .PP D'autres erreurs peuvent se produire suivant le type d'objet associé à \fIfd\fP. .SH STANDARDS POSIX.1\-2008. .SH HISTORIQUE .\" SVr4 documents additional error .\" conditions EDEADLK, ENOLCK, ENOLNK, ENOSR, ENXIO, or ERANGE. SVr4, 4.3BSD, POSIX.1\-2001. .PP Sous SVr4, un appel \fBwrite\fP() peut être interrompu, et renvoyer \fBEINTR\fP à n'importe quel moment, pas seulement avant l'écriture des données. .SH NOTES Une réussite de \fBwrite\fP() n'offre aucune garantie que les données se trouvent sur le disque. Sur certains systèmes de fichiers, y compris NFS, elle ne garantit même pas que l'espace suffisant a été réservé pour les données. Dans certains cas, certaines erreurs pourraient être différées à une prochaine invocation de \fBwrite\fP(), de \fBfsync\fP(2) ou même de \fBclose\fP(2). La seule manière d'être sûr de la réussite est d'invoquer \fBfsync\fP(2) après avoir écrit les données. .PP Si un \fBwrite\fP() est interrompu par un gestionnaire de signaux avant d'avoir écrit quoi que ce soit, l'appel échoue avec \fBEINTR\fP\ ; s'il est interrompu après avoir écrit au moins un octet, l'appel réussit et renvoie le nombre d'octets écrits. .PP .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 Dans Linux, \fBwrite\fP() et les appels systèmes analogues transfèrent au maximum 0x7ffff000 (2\ 147\ 479\ 552) octets, renvoyant le nombre d'octets réellement transférés. (Cela est vrai aussi bien sur les systèmes 32\ bits que sur les systèmes 64\ bits.) .PP Le renvoi d'une valeur d'erreur pendant l'exécution de \fBwrite\fP() utilisant les E/S directes ne signifie pas que la totalité de l'écriture a échoué. Des données partielles ont pu être écrites et les données à la position pointée dans le fichier où l'appel \fBwrite\fP() était tenté devraient être considérées comme incohérentes. .SH BOGUES Selon POSIX.1\-2008/SUSv4, Section XSI 2.9.7 ("Thread Interactions with Regular File Operations")\ : .PP .RS 4 Toutes les fonctions suivantes doivent être atomiques et ne pas se perturber mutuellement pour ce qui concerne les effets spécifiés dans POSIX.1\-2008 lorsqu'elles opèrent sur les fichiers réguliers ou sur les liens symboliques\ :\ ... .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 \fBwrite\fP() et \fBwritev\fP(2) figurent parmi les API listées par la suite. En outre, la mise à jour du décalage de fichier fait partie des effets qui doivent être atomiques pour les threads (et pour les processus). Cependant, avant Linux\ 3.14, cela n'était pas le cas\ : si deux processus partageant un même descripteur de fichier (consultez \fBopen\fP(2)) effectuaient une action \fBwrite\fP() (ou \fBwritev\fP(2)) simultanément, alors les opération E/S n'étaient pas atomiques pour ce qui concernait la mise à jour du décalage de fichier. En conséquence, les écritures effectuées par les deux processus pouvaient se chevaucher au niveau des blocs de données (de façon incorrecte). Ce problème a été résolu dans Linux\ 3.14. .SH "VOIR AUSSI" \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) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Frédéric Hantrais et Jean-Pierre Giraud . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .