.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" and Copyright (C) 1993 Michael Haardt, Ian Jackson. .\" and Copyright (C) 2009-2015 Michael Kerrisk, .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Sat Jul 24 00:06:00 1993 by Rik Faith .\" Modified Wed Jan 17 16:02:32 1996 by Michael Haardt .\" .\" Modified Thu Apr 11 19:26:35 1996 by Andries Brouwer .\" Modified Sun Jul 21 18:59:33 1996 by Andries Brouwer .\" Modified Fri Jan 31 16:47:33 1997 by Eric S. Raymond .\" Modified Sat Jul 12 20:45:39 1997 by Michael Haardt .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH READ 2 "2 février 2018" Linux "Manuel du programmeur Linux" .SH NOM read \- Lire depuis un descripteur de fichier .SH SYNOPSIS .nf \fB#include \fP .PP \fBssize_t read(int \fP\fIfd\fP\fB, void *\fP\fIbuf\fP\fB, size_t \fP\fIcount\fP\fB);\fP .fi .SH DESCRIPTION \fBread\fP() lit jusqu'à \fIcount\fP octets depuis le descripteur de fichier \fIfd\fP dans le tampon pointé par \fIbuf\fP. .PP 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 \fBread\fP() renvoie zéro. .PP Si \fIcount\fP vaut zéro, \fBread\fP() \fIpourrait\fP détecter les erreurs décrites ci\-dessous. En l’absence d'erreur, ou si \fBread\fP() ne vérifie pas les erreurs, un \fBread\fP() avec un \fIcount\fP de \fB0\fP renvoie zéro et n'a pas d'autres effets. .PP Selon POSIX.1, si \fIcount\fP est supérieur à \fBSSIZE_MAX\fP, le résultat est défini par l'implémentation\ ; voir les NOTES pour la limite supérieure sous Linux. .SH "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 \fBread\fP() a été interrompu par un signal. Voir les NOTES. .PP En cas d'erreur, \fB\-1\fP est renvoyé et \fIerrno\fP est positionné correctement. Dans ce cas, il n'est pas précisé si la position du fichier (s'il y en a) change. .SH ERREURS .TP \fBEAGAIN\fP Le descripteur de fichier \fIfd\fP fait référence à un fichier autre qu'un socket et a été marqué comme non bloquant (\fBO_NONBLOCK\fP), et la lecture devrait bloquer. Voir \fBopen\fP(2) pour plus de détails sur l'attribut \fBO_NONBLOCK\fP. .TP \fBEAGAIN\fP ou \fBEWOULDBLOCK\fP .\" Actually EAGAIN on Linux Le descripteur de fichier \fIfd\fP fait référence à un socket et a été marqué comme non bloquant (\fBO_NONBLOCK\fP), 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. .TP \fBEBADF\fP \fIfd\fP n'est pas un descripteur de fichier valable ou n'est pas ouvert en lecture. .TP \fBEFAULT\fP \fIbuf\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEINTR\fP \fBread\fP() a été interrompu par un signal avant d'avoir eu le temps de lire quoi que ce soit\ ; consultez \fBsignal\fP(7). .TP \fBEINVAL\fP Le descripteur \fIfd\fP correspond à un objet qu'il est impossible de lire. Ou bien le fichier a été ouvert avec l'attribut \fBO_DIRECT\fP, et l'adresse de \fIbuf\fP, la valeur de \fIcount\fP ou la position actuelle de la tête de lecture ne sont pas alignées correctement. .TP \fBEINVAL\fP \fIfd\fP a été créé par un appel à \fBtimerfd_create\fP(2) et une mauvaise taille de tampon a été donnée à \fBread\fP()\ ; consultez \fBtimerfd_create\fP(2) pour plus d'informations. .TP \fBEIO\fP 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 \fBSIGTTIN\fP, 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 \fBEIO\fP 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 \fIPerte de verrou\fP de \fBfcntl\fP(2) pour plus de détails. .TP \fBEISDIR\fP \fIfd\fP est un répertoire. .PP D'autres erreurs peuvent se produire suivant le type d'objet associé à \fIfd\fP. .SH CONFORMITÉ SVr4, 4.3BSD, POSIX.1\-2001. .SH NOTES Les types \fIsize_t\fP et \fIssize_t\fP sont respectivement des types de données d’entiers non signés et signés indiqués par POSIX.1. .PP .\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69 Sur Linux, \fBread\fP() (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). .PP 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 \fIst_atime\fP (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 \fIst_atime\fP 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. .SH BOGUES Selon POSIX.1\-2008/SUSv4, Section\ XSI\ 2.9.7 («\ Thread Interactions with Regular File Operations\ »)\ : .PP .RS 4 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\ :\ ... .RE .PP .\" http://thread.gmane.org/gmane.linux.kernel/1649458 .\" From: Michael Kerrisk (man-pages gmail.com> .\" Subject: Update of file offset on write() etc. is non-atomic with I/O .\" Date: 2014-02-17 15:41:37 GMT .\" Newsgroups: gmane.linux.kernel, gmane.linux.file-systems .\" commit 9c225f2655e36a470c4f58dbbc99244c5fc7f2d4 .\" Author: Linus Torvalds .\" Date: Mon Mar 3 09:36:58 2014 -0800 .\" .\" vfs: atomic f_pos accesses as per POSIX \fBread\fP() et \fBreadv\fP(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 \fBopen\fP(2)) effectuaient une action \fBread\fP() (ou \fBreadv\fP(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. .SH "VOIR AUSSI" \fBclose\fP(2), \fBfcntl\fP(2), \fBioctl\fP(2), \fBlseek\fP(2), \fBopen\fP(2), \fBpread\fP(2), \fBreaddir\fP(2), \fBreadlink\fP(2), \fBreadv\fP(2), \fBselect\fP(2), \fBwrite\fP(2), \fBfread\fP(3) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP 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/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Frédéric Hantrais et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .