Partager via


fread_s

Lit les données d'un flux.Cette version de fread a des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité du CRT.

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 d' FILE .

Valeur de retour

fread_s retourne le nombre d'éléments (integers) qui ont été lus dans la mémoire tampon, qui peut être moins qu' count si une erreur de lecture ou la fin du fichier se produit avant qu' count soit atteint.Utilisez la fonction d' feof ou d' ferror pour distinguer une erreur d'une condition fin de fichier.Si size ou count est 0, fread_s retourne 0 et le contenu de la mémoire tampon reste inchangé.Si stream ou buffer est un pointeur null, fread_s appelle le gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution pour continuer, les jeux errno de cette fonction à EINVAL et retourne 0.

Pour plus d'informations sur les codes d'erreur, consultez _doserrno, errno, _sys_errlist, et _sys_nerr.

Notes

La fonction d' fread_s lit jusqu'à count des éléments des octets d' elementSize de l'entrée stream et les stocke dans buffer.Le pointeur de fichier associé à stream (le cas échéant) est augmenté par le nombre d'octets réellement lus.Si le flux donné est ouvert en mode texte, des paires saut de ligne-retour chariot sont remplacées par les caractères unique de saut de ligne.Le remplacement n'a aucun effet sur le pointeur de fichier ou la valeur de retour.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 d'autres threads.si vous avez besoin d'une version non verrouillante, utilisez _fread_nolock.

Configuration requise

Fonction

en-tête requis

fread_s

<stdio.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité.

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;
   }
}
  
  
  
  
  
  

Voir aussi

Référence

E/S de flux

fwrite

_read