WRITE
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 18 juin 2007
Index
Menu principal
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()
é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
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
- 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É
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 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
close(2),
fcntl(2),
fsync(2),
ioctl(2),
lseek(2),
open(2),
pwrite(2),
read(2),
select(2),
writev(2),
fwrite(3)
TRADUCTION
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.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- CONFORMITÉ
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008