write   Début   Suivant   Sommaire   Préc.page.lue   Accueil

Section: Manuel du programmeur Linux (2)
Updated: 18 juin 2007
Sommaire  




NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

write - Écrire dans un descripteur de fichier  




SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

write() écrit jusqu'à count octets dans le fichier associé au descripteur fd depuis le tampon pointé par buf.

Le nombre d'octets écrits peut être inférieur à count si, par exemple, la place disponible sur le support physique concerné est insuffisante, ou si la limite de ressource RLIMIT_FSIZE a été atteinte (voir setrlimit(2)), ou si l'appel a été interrompu par un gestionnaire de signal avant que les count octets aient été écrits.

(Voir également pipe(7).)

Pour un fichier positionnable (c'est-à-dire un fichier sur lequel on peut appliquer lseek(2), par exemple, un fichier ordinaire) l'écriture s'effectue à la position courante de la tête de lecture, et la tête de lecture est déplacée du nombre d'octets effectivement écrits.

Si le fichier a été ouvert avec l'attribut O_APPEND de open(2), la tête de lecture est d'abord positionnée à la fin du fichier avant que l'écriture ne commence. Le déplacement de la tête de lecture et l'opération d'écriture sont effectués en une étape 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 zéro, et si fd est associé à un fichier normal, 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 effets de bord. Si count vaut zéro, et si fd est associé à autre chose qu'un fichier ordinaire, les résultats sont indéfinis.

 




ERREURS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

EAGAIN

L'écriture est non bloquante (attribut O_NONBLOCK du descripteur), et l'opération devrait bloquer.

EBADF

fd n'est pas un descripteur de fichier valide, ou n'est pas ouvert en écriture.

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 déplacement maximal autorisé.

EINTR

L'appel système a été interrompu par un signal avant d'avoir pu écrire quoique ce soit ; voir signal(7).

EINVAL

fd correspond à un objet ne permettant pas l'écriture ; ou bien le fichier a été ouvert avec l'attribut O_DIRECT, et soit l'adresse spécifiée dans buf, soit la valeur spécifiée dans count, soit la tête de lecture du fichier ne sont pas correctement alignés.

EIO

Une erreur d'entrée-sortie 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 . S'il intercepte, bloque ou ignore ce signal, EPIPE est renvoyé.

D'autres erreurs peuvent se produire suivant le type d'objet associé à fd.  




CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 une écriture write() est interrompue par un gestionnaire de signal avant que le moindre octet n'ait été écrit, l'appel échoue avec l'erreur EINTR ; si elle est interrompue après qu'au moins un octet ait été écrit, l'appel réussit et renvoie le nombre d'octets écrits.

 




VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2), fwrite(3)  




TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 12 octobre 1996 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 write ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil

NOM

SYNOPSIS

DESCRIPTION

VALEUR RENVOYÉE

ERREURS

CONFORMITÉ

NOTES

VOIR AUSSI

TRADUCTION


Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EAGAINERREURS
EBADFERREURS
EFAULTERREURS
EFBIGERREURS
EINTRERREURS
EINVALERREURS
EIOERREURS
ENOSPCERREURS
EPIPEERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 27/10/2008 08:42:28, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional