Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       read - Lire depuis un descripteur de fichier

SYNOPSIS

       #include <unistd.h>

       ssize_t read(int fd, void *buf, 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, -1 est renvoyé et errno est positionné correctement. Dans ce cas, il n'est  pas  précisé
       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.

CONFORMITÉ

       SVr4, 4.3BSD, POSIX.1-2001.

NOTES

       Les types size_t et ssize_t sont respectivement des types de  données  d’entiers  non  signés  et  signés
       indiqués par POSIX.1.

       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, 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 ouvert (consultez open(2)) effectuaient une action read() (ou
       readv(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 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)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

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   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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 ⟨⟩.