Provided by: manpages-fr-dev_4.27.0-1_all bug

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.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                            read(2)