Provided by: manpages-fr-dev_3.57d1p1-1_all 

NOM
write - Écrire dans un descripteur de fichier
SYNOPSIS
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
DESCRIPTION
write() lit au maximum count octets dans la zone mémoire pointée par buf, et les écrit dans le fichier
référencé par le descripteur fd.
Le nombre d'octets écrits peut être inférieur à count par exemple si la place disponible sur le
périphérique est insuffisante, ou la limite de ressource RLIMIT_FSIZE est atteinte (consultez
setrlimit(2)), ou l'appel est interrompu par un gestionnaire de signal après avoir écrit moins de count
octets. (Consultez aussi pipe(7).)
Pour un fichier sur lequel lseek(2) est possible (par exemple un fichier ordinaire), l'écriture a lieu à
la position actuelle dans le fichier, et elle est déplacée du nombre d'octets effectivement écrits. Si le
fichier était ouvert avec O_APPEND, la position avant l'écriture est à la fin du fichier. La modification
de la position et l'écriture sont effectuées de façon atomique.
POSIX réclame qu'une lecture avec read(2) effectuée après le retour d'une écriture avec write(), renvoie
les nouvelles données. Notez que tous les systèmes de fichiers ne sont pas compatibles avec POSIX.
VALEUR RENVOYÉE
write() renvoie le nombre d'octets écrits (0 signifiant aucune écriture), ou -1 s'il échoue, auquel cas
errno contient le code d'erreur.
Si count vaut 0 et si fd correspond à un fichier ordinaire, write() 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, 0 sera renvoyé sans autre
effet de bord. Si count est nul et fd est un fichier spécial, les résultats sont indéfinis.
ERREURS
EAGAIN Le descripteur de fichier fd fait référence à un fichier autre qu'une socket et a été marqué comme
non bloquant (O_NONBLOCK), et l'écriture devrait bloquer.
EAGAIN ou EWOULDBLOCK
Le descripteur de fichier fd fait référence à un fichier autre qu'une socket et a été marqué comme
non bloquant (O_NONBLOCK), 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.
EBADF fd n'est pas un descripteur de fichier valable, ou n'est pas ouvert en écriture.
EDESTADDRREQ
fd fait référence à une socket de datagramme pour laquelle l'adresse du correspondant n'a pas été
initialisée avec connect(2).
EDQUOT Le quota de blocs de disque de l'utilisateur sur le système de fichiers contenant le fichier
correspondant à fd a été atteint.
EFAULT buf pointe en dehors de l'espace d'adressage accessible.
EFBIG Tentative d'écrire un fichier dont la taille dépasse un maximum dépendant de l'implémentation ou
du processus, ou d'écrire à une position qui dépasse le maximum autorisé.
EINTR L'appel système a été interrompu par un signal avant d'avoir pu écrire quoi que ce soit ;
consultez signal(7).
EINVAL fd correspond à un objet sur lequel il est impossible d'écrire. Ou bien le fichier a été ouvert
avec l'attribut O_DIRECT, et soit l'adresse de buf, soit la valeur de count, soit la position
actuelle dans le fichier ne sont pas alignées correctement.
EIO Une erreur d'entrée-sortie bas niveau s'est produite durant la modification de l'inœud.
ENOSPC Le périphérique correspondant à fd n'a plus de place disponible.
EPIPE fd est connecté à un tube (pipe) ou une socket dont l'autre extrémité est fermée. Quand ceci se
produit, le processus écrivain reçoit un signal SIGPIPE. (Ainsi la valeur de retour de write n'est
vue que si le programme intercepte, bloque ou ignore ce signal.
D'autres erreurs peuvent se produire suivant le type d'objet associé à fd.
CONFORMITÉ
SVr4, BSD 4.3, POSIX.1-2001.
Sous SVr4, un appel write() peut être interrompu, et renvoyer EINTR à n'importe quel moment, pas
seulement avant l'écriture des données.
NOTES
Une réussite de write() n'offre aucune garantie que les données se trouvent sur le disque. En fait, sur
certaines implémentations erronées, elle ne garantit même pas que l'espace suffisant a été réservé pour
les données. La seule manière d'être sûr de la réussite est d'invoquer fsync(2) après avoir écrit les
données.
Si un write() est interrompu par un gestionnaire de signaux avant d'avoir écrit quoi que ce soit, l'appel
échoue avec EINTR ; s'il est interrompu après avoir écrit au moins un octet, l'appel réussit et renvoie
le nombre d'octets écrits.
VOIR AUSSI
close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2),
fwrite(3)
COLOPHON
Cette page fait partie de la publication 3.57 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
<http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
<section> <page_de_man> ».
Linux 27 janvier 2013 WRITE(2)