write

WRITE(2)                  Manuel du programmeur Linux                 WRITE(2)



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.

BOGUES
       Selon POSIX.1-2008/SUSv4, Section XSI 2.9.7 ("Thread Interactions with
       Regular File Operations") :

           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 : ...

       write() et writev(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, dans les versions de Linux antérieures à 3.14, cela
       n'était pas le cas : si deux processus partageant un même descripteur
       de fichier (consultez open(2)) effectuaient une action write() (ou
       writev(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.

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.70 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 Ã
       <perkamon-fr@traduc.org>.

       Vous pouvez toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».



Linux                             4 mai 2014                          WRITE(2)