freadfread

Lit les données d’un flux.Reads data from a stream.

SyntaxeSyntax

size_t fread(
   void *buffer,
   size_t size,
   size_t count,
   FILE *stream
);

ParamètresParameters

bufferbuffer
Emplacement de stockage des données.Storage location for data.

sizesize
Taille de l’élément en octets.Item size in bytes.

countcount
Nombre maximal d’éléments à lire.Maximum number of items to be read.

streamstream
Pointeur désignant la structure FILE.Pointer to FILE structure.

Valeur de retourReturn Value

fread retourne le nombre d’éléments complets réellement lus, qui peut être inférieur à Count si une erreur se produit ou si la fin du fichier est rencontrée avant d’atteindre le nombre.fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. Utilisez la fonction feof ou ferror pour distinguer une erreur de lecture d’une condition de fin de fichier.Use the feof or ferror function to distinguish a read error from an end-of-file condition. Si la taille ou le nombre est égal à 0, fread retourne 0 et le contenu de la mémoire tampon n’est pas modifié.If size or count is 0, fread returns 0 and the buffer contents are unchanged. Si Stream ou buffer est un pointeur null, fread appelle le gestionnaire de paramètre non valide, comme décrit dans validation de paramètre.If stream or buffer is a null pointer, fread invokes the invalid parameter handler, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, cette fonction affecte à errno la valeur EINVAL et retourne 0.If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

Pour plus d’informations sur ces codes d’erreur _,_consultez doserrno, errno, __sys errlist et _sys nErr .See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these error codes.

NotesRemarks

La fonction fread lit le nombre d’éléments de taille octets à partir du flux d’entrée et les stocke dans la mémoire tampon.The fread function reads up to count items of size bytes from the input stream and stores them in buffer. Le pointeur de fichier associé au flux (le cas échéant) est augmenté du nombre d’octets réellement lus.The file pointer associated with stream (if there is one) is increased by the number of bytes actually read. Si le flux donné est ouvert en mode texte, les nouvelles lignes de style Windows sont converties en nouvelles lignes de style UNIX.If the given stream is opened in text mode, Windows-style newlines are converted into Unix-style newlines. Autrement dit, les paires CRLF (retour chariot-saut de ligne) sont remplacées par des caractères de saut de ligne unique (LF).That is, carriage return-line feed (CRLF) pairs are replaced by single line feed (LF) characters. Le remplacement n’a aucun effet sur le pointeur de fichier ou la valeur de retour.The replacement has no effect on the file pointer or the return value. La position du pointeur de fichier est indéterminée si une erreur se produit.The file-pointer position is indeterminate if an error occurs. La valeur d’un élément partiellement lu ne peut pas être déterminée.The value of a partially read item cannot be determined.

En cas d’utilisation sur un flux en mode texte, si la quantité de données demandées (autrement dit, le nombrede tailles * ) est supérieure ou égale à la taille de la mémoire tampon du fichier * interne (par défaut, il s’agit de 4096 octets, configurable à l’aide de 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.When used on a text mode stream, if the amount of data requested (that is, size * count) is greater than or equal to the internal FILE * buffer size (by default this is 4096 bytes, configurable by using setvbuf), stream data is copied directly into the user-provided buffer, and newline conversion is done in that buffer. É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 sont passées à la taille return_value * de la mémoire tampon[] (où return_value est la valeur de retour de fread) peut contient des données non converties du fichier.Since the converted data may be shorter than the stream data copied into the buffer, data past buffer[return_value * size] (where return_value is the return value from fread) may contain unconverted data from the file. Pour cette raison, nous vous recommandons de terminer par null les données de type caractère au niveau dela mémoire tampon[return_value * . si l’objectif de la mémoire tampon est d’agir en tant que chaîne de style C.For this reason, we recommend you null-terminate character data at buffer[return_value * size] if the intent of the buffer is to act as a C-style string. Pour plus d’informations sur les effets du mode texte et du mode binaire, consultez fopen .See fopen for details on the effects of text mode and binary mode.

Cette fonction verrouille les autres threads.This function locks out other threads. Si vous avez besoin d’une version sans verrouillage, utilisez _fread_nolock.If you need a non-locking version, use _fread_nolock.

Configuration requiseRequirements

FonctionFunction En-tête requisRequired header
freadfread <stdio.h><stdio.h>

Pour plus d’informations sur la compatibilité, voir consultez Compatibilité.For additional compatibility information, see Compatibility.

ExempleExample

// 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 aussiSee also

E/S de fluxStream I/O
E/s de fichier texte et binaireText and Binary File I/O
fopenfopen
fwritefwrite
_read_read