Partager via


fread_s

Lit les données d’un flux. Cette version de fread est assortie des améliorations de sécurité décrites dans Fonctionnalités de sécurité dans le CRT.

Syntaxe

size_t fread_s(
   void *buffer,
   size_t bufferSize,
   size_t elementSize,
   size_t count,
   FILE *stream
);

Paramètres

buffer
Emplacement de stockage des données.

bufferSize
Taille de la mémoire tampon de destination en octets.

elementSize
Taille de l’élément à lire en octets.

count
Nombre maximal d’éléments à lire.

stream
Pointeur vers la structure FILE .

Valeur retournée

fread_s retourne le nombre d’éléments (entiers) qui ont été lus dans la mémoire tampon ; ce nombre peut être inférieur à count si une erreur de lecture ou la fin du fichier est rencontrée avant que count ne soit atteint. Utilisez la fonction feof ou ferror pour distinguer une erreur d’une condition de fin de fichier. Si size ou count a la valeur 0, fread_s retourne 0 et le contenu de la mémoire tampon n’est pas modifié. Si stream ou buffer est un pointeur Null, fread_s 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 d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

La fonction fread_s lit jusqu’à count éléments de elementSize octets à partir de l’entrée stream et les stocke dans buffer. Le pointeur de fichier associé stream à (s’il en existe un) est avancé par le nombre d’octets fread_s lus. Si le flux donné est ouvert en mode texte, les paires de flux de retour chariot sont remplacées par des caractères de flux de ligne uniques. 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.

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_s <stdio.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_fread_s.c
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c
//
// This program opens a file that's named FREAD.OUT and
// writes characters to the file. It then tries to open
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>

#define BUFFERSIZE 30
#define DATASIZE 22
#define ELEMENTCOUNT 2
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)
#define FILENAME "FREAD.OUT"

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   for ( i = 0; i < DATASIZE; i++ )
      list[i] = (char)('z' - i);
   list[DATASIZE] = '\0'; // terminal null so we can print it

   // Open file in text mode:
   if( fopen_s( &stream, FILENAME, "w+t" ) == 0 )
   {
      // Write DATASIZE characters to stream
      printf( "Contents of buffer before write/read:\n\t%s\n\n", list );
      numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );
      printf( "Wrote %d items\n\n", numwritten );
      fclose( stream );
   } else {
      printf( "Problem opening the file\n" );
      return -1;
   }

   if( fopen_s( &stream, FILENAME, "r+t" ) == 0 )   {
      // Attempt to read in characters in 2 blocks of 11
      numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );
      printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );
      printf( "Contents of buffer after write/read:\n\t%s\n", list );
      fclose( stream );
   } else {
      printf( "File could not be opened\n" );
      return -1;
   }
}
Contents of buffer before write/read:
        zyxwvutsrqponmlkjihgfe

Wrote 22 items

Number of 11-byte elements read = 2

Contents of buffer after write/read:
        zyxwvutsrqponmlkjihgfe

Voir aussi

E/S de flux
fwrite
_read