Freigeben über


fread_s

Liest Daten aus einem Stream. Diese Version von fread verfügt werden, wie in Sicherheitsfunktionen in der CRT beschrieben.

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

Parameter

  • buffer
    Speicherort für Daten.

  • bufferSize
    Größe des Zielpuffers in Bytes.

  • elementSize
    Größe des Elements, um von Bytes in zu lesen.

  • count
    Maximale Anzahl zu lesende Elemente.

  • stream
    Zeiger zur FILE-Struktur.

Rückgabewert

fread_s gibt die Anzahl der (ganzen) Elemente zurück, die in den Puffer gelesen wurden ist, der kleiner als count sein, wenn ein Lesefehler oder das Ende der Datei erreicht wird, bevor count erreicht wird. Verwenden Sie die feofferror oder Funktion, um einen Fehler aus einer Dateiende-Bedingung zu unterscheiden. Wenn size oder count 0 ist, gibt fread_s 0 zurück und den Pufferinhalt ist unverändert. Wenn stream oder buffer ein NULL-Zeiger ist, ruft fread_s den ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben. Wenn die Ausführung zulässig ist, um fortzufahren, Sätze errno dieser Funktion zu EINVAL und zu gibt 0 zurück.

Weitere Informationen zu Fehlercodes, finden Sie unter _doserrno, errno, _sys_errlist und _sys_nerr.

Hinweise

Die fread_s-Funktion liest bis count-Elemente von elementSize Bytes von der Eingabe stream und speichert sie in buffer. Der Dateizeiger, der stream zugeordnet ist (sofern eines vorhanden ist), wird durch die Anzahl von Bytes gelesen tatsächlich verbessert. Wenn der angegebene im Stream Textmodus geöffnet ist, werden Wagenrücklauf/Zeilenvorschub-Paare durch einzelne Zeilenvorschubzeichen ersetzt. Die Ersetzung hat keine Auswirkungen auf der Dateizeiger oder Rückgabewert. Die Dateizeigerposition ist unbestimmt, wenn ein Fehler auftritt. Der Wert eines teilweise Leseelements kann nicht bestimmt werden.

Diese Funktion sperrt out andere Threads. Wenn Sie eine nicht sperrende Version benötigen, verwenden Sie _fread_nolock.

Anforderungen

Funktion

Erforderlicher Header

fread_s

<stdio.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

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

Siehe auch

Referenz

Stream-E/A

fwrite

_read