fread
Lit les données d’un flux.
Syntaxe
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Paramètres
buffer
Emplacement de stockage des données.
size
Taille de l’élément en octets.
count
Nombre maximal d’éléments à lire.
stream
Pointeur vers la structure FILE
.
Valeur retournée
fread
retourne le nombre d’éléments complets count
lus par la fonction, qui peut être inférieur à si une erreur se produit, ou si elle rencontre la fin du fichier avant d’atteindre count
. Utilisez la fonction feof
ou ferror
pour distinguer une erreur de lecture d’une condition de fin de fichier. Si size
ou count
a la valeur 0, fread
retourne 0 et le contenu de la mémoire tampon n’est pas modifié. Si stream
ou buffer
est un pointeur Null, fread
appelle le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, cette fonction affecte à errno
la valeur EINVAL
et retourne 0.
Pour plus d’informations sur les codes de retour, consultez , , _sys_errlist
_doserrno
et _sys_nerr
.errno
Notes
La fonction fread
lit jusqu’à count
éléments de size
octets à partir de l’entrée stream
et les stocke dans buffer
. Le pointeur de fichier associé à stream
(le cas échéant) est avancé par le nombre d’octets fread
lus. Si le flux donné est ouvert en mode texte, les nouvelles lignes de style Windows sont converties en nouvelles lignes de style Unix. Autrement dit, les paires de saut de ligne de retour chariot (CRLF) sont remplacées par des caractères LF (Single Line Feed). Le remplacement n’a aucun effet sur le pointeur de fichier ou la valeur de retour. La position du pointeur de fichier est indéterminée si une erreur se produit. La valeur d’un élément partiellement lu ne peut pas être déterminée.
Lorsqu’elle est utilisée sur un flux en mode texte, si la quantité de données demandées (autrement dit, size
* count
) est supérieure ou égale à la taille de mémoire tampon interne FILE
* (par défaut, la taille est de 4096 octets, configurable à l’aide setvbuf
), les données de flux sont copiées directement dans la mémoire tampon fournie par l’utilisateur, et la conversion de nouvelle ligne est effectuée dans cette mémoire tampon. Étant donné que les données converties peuvent être plus courtes que les données de flux copiées dans la mémoire tampon, les données passées buffer
return_value
size
* [] (où return_value
est la valeur de retour de fread
) peuvent contenir des données non converties à partir du fichier. Pour cette raison, nous vous recommandons de mettre fin à des données de caractère null à buffer
[return_value
* size
] si l’intention de la mémoire tampon est d’agir en tant que chaîne de style C. Pour fopen
plus d’informations sur les effets du mode texte et du mode binaire.
Cette fonction verrouille les autres threads. Si vous avez besoin d’une version sans verrouillage, utilisez _fread_nolock
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Fonction | En-tête requis |
---|---|
fread |
<stdio.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );
}
else
printf( "Problem opening the file\n" );
if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb