Partage via


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_doserrnoet _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 bufferreturn_valuesize * [] (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

Voir aussi

E/S de flux
E/S en mode texte et binaire
fopen
fwrite
_read