Provided by: manpages-fr-dev_4.21.0-2_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

       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, 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  ⟨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⟩.