Man page - read(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro zh_TW zh_CN de

Manual

read

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

read - Lire depuis un descripteur de fichier

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <unistd.h>

ssize_t read(int fd , void buf [. count ], size_t count );

DESCRIPTION

read () lit jusqu’à count octets depuis le descripteur de fichier fd dans le tampon pointĂ© par buf .

Sur les fichiers permettant le positionnement, l’opĂ©ration de lecture a lieu Ă  la position actuelle dans le fichier et elle est dĂ©placĂ©e du nombre d’octets lus. Si la position actuelle dans le fichier est Ă  la fin du fichier ou aprĂšs, aucun octet n’est lu et read () renvoie zĂ©ro.

Si count vaut zĂ©ro, read () pourrait dĂ©tecter les erreurs dĂ©crites ci-dessous. En l’absence d’erreur, ou si read () ne vĂ©rifie pas les erreurs, un read () avec un count de 0 renvoie zĂ©ro et n’a pas d’autres effets.

Selon POSIX.1, si count est supĂ©rieur Ă  SSIZE_MAX , le rĂ©sultat est dĂ©fini par l’implĂ©mentation ; voir les NOTES pour la limite supĂ©rieure sous Linux.

VALEUR RENVOYÉE

En cas de succĂšs, le nombre d’octets lus est renvoyĂ© (zĂ©ro indique une fin de fichier), et la tĂȘte de lecture est avancĂ©e de ce nombre. Le fait que le nombre renvoyĂ© soit plus petit que le nombre demandĂ© n’est pas une erreur. Cela se produit, par exemple, s’il y a moins d’octets disponibles (parce qu’on Ă©tait peut-ĂȘtre prĂšs de la fin du fichier, ou parce qu’on lit depuis un tube ou un terminal) ou bien si read () a Ă©tĂ© interrompu par un signal. Voir les NOTES.

En cas d’erreur, la valeur de retour est -1 et errno est dĂ©finie pour prĂ©ciser l’erreur. Dans ce cas, il n’est pas indiquĂ© si la position du fichier (s’il y en a) change.

ERREURS

EAGAIN

Le descripteur de fichier fd fait rĂ©fĂ©rence Ă  un fichier autre qu’un socket et a Ă©tĂ© marquĂ© comme non bloquant ( O_NONBLOCK ), et la lecture devrait bloquer. Voir open (2) pour plus de dĂ©tails sur l’attribut O_NONBLOCK .

EAGAIN ou EWOULDBLOCK

Le descripteur de fichier fd fait rĂ©fĂ©rence Ă  un socket et a Ă©tĂ© marquĂ© comme non bloquant ( O_NONBLOCK ), et la lecture 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 lecture.

EFAULT

buf pointe en dehors de l’espace d’adressage accessible.

EINTR

read () a Ă©tĂ© interrompu par un signal avant d’avoir eu le temps de lire quoi que ce soit ; consultez signal (7).

EINVAL

Le descripteur fd correspond Ă  un objet qu’il est impossible de lire. Ou bien le fichier a Ă©tĂ© ouvert avec l’attribut O_DIRECT , et l’adresse de buf , la valeur de count ou la position actuelle de la tĂȘte de lecture ne sont pas alignĂ©es correctement.

EINVAL

fd a Ă©tĂ© créé par un appel Ă  timerfd_create (2) et une mauvaise taille de tampon a Ă©tĂ© donnĂ©e Ă  read () ; consultez timerfd_create (2) pour plus d’informations.

EIO

Erreur d’entrĂ©e-sortie. Cela arrive, par exemple, si un processus est dans un groupe en arriĂšre-plan et tente de lire depuis le terminal qui le gĂšre et soit il ignore, soit il bloque un signal SIGTTIN , ou bien son groupe est orphelin. Cela arrive Ă©galement si une erreur d’entrĂ©e-sortie de bas niveau s’est produite pendant la lecture d’un disque ou d’une bande. Une autre cause possible de EIO sur les systĂšmes de fichiers en rĂ©seau est la prĂ©sence d’un verrou consultatif sur le descripteur de fichier et le fait qu’il a Ă©tĂ© perdu. Voir la section Perte de verrou de fcntl (2) pour plus de dĂ©tails.

EISDIR

fd est un répertoire.

D’autres erreurs peuvent se produire suivant le type d’objet associĂ© Ă  fd .

STANDARDS

POSIX.1-2008.

HISTORIQUE

SVr4, 4.3BSD, POSIX.1-2001.

NOTES

Sur Linux, read () (et les appels systĂšme Ă©quivalents) transfĂšreront au maximum 0x7ffff000 (2 147 479 552) octets et renverront le nombre d’octets transfĂ©rĂ©s (cela est vrai aussi bien sur des systĂšmes 32 que 64 bits).

Sur un systĂšme de fichiers NFS, la lecture de petites quantitĂ©s de donnĂ©es ne mettra Ă  jour l’horodatage du fichier que lors de la premiĂšre lecture. Les lectures suivantes ne modifieront pas cette heure. Cela est dĂ» Ă  la mise en cache des attributs cĂŽtĂ© client, car la plupart, si ce n’est tous les clients NFS, mettent Ă  jour sur le serveur st_atime (heure de dernier accĂšs au fichier), et les lectures cĂŽtĂ© client satisfaites par le cache du client n’effectueront pas la mise Ă  jour de st_atime sur le serveur, car il n’y a pas de lecture du cĂŽtĂ© serveur. La vĂ©ritable sĂ©mantique UNIX peut ĂȘtre obtenue en dĂ©sactivant le cache des attributs du cĂŽtĂ© client, mais gĂ©nĂ©ralement cela augmente sensiblement la charge du serveur et dĂ©grade les performances.

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 normaux ou sur les liens symboliques : ...

read () et readv (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 ouvert (consultez open (2)) effectuaient une action read () (ou readv (2)) simultanĂ©ment, alors les opĂ©rations E/S n’étaient pas atomiques pour ce qui concernait la mise Ă  jour du dĂ©calage de fichier. En consĂ©quence, les lectures effectuĂ©es par les deux processus pouvaient se chevaucher au niveau des blocs des donnĂ©es rĂ©cupĂ©rĂ©es (de façon incorrecte). Ce problĂšme a Ă©tĂ© rĂ©solu dans Linux 3.14.

VOIR AUSSI

close (2), fcntl (2), ioctl (2), lseek (2), open (2), pread (2), readdir (2), readlink (2), readv (2), select (2), write (2), fread (3)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .