fread_s

Liest Daten aus einem Stream Diese Version von fread verfügt über Sicherheitsverbesserungen, wie in den Sicherheitsfeatures im CRT beschrieben.

Syntax

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 Byte.

elementSize
Größe des zu lesenden Elements in Byte.

count
Maximale Anzahl der zu lesenden Elemente.

stream
Zeiger zur FILE -Struktur.

Rückgabewert

fread_s gibt die Anzahl der (ganzen) Elemente zurück, die in den Puffer gelesen wurden, die möglicherweise geringer als count ist, wenn ein Fehler oder das Ende der Datei vor count erreicht wird. Verwenden Sie die Funktionen feof oder ferror, um einen Fehler von einer Dateiendebedingung zu unterscheiden. Wenn size oder count 0 ist, gibt fread_s 0 zurück, und die Pufferinhalte bleiben unverändert. Wenn stream es sich um buffer einen Nullzeiger handelt, fread_s wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, setzt diese Funktion errno auf EINVAL und gibt "0" zurück.

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

Hinweise

Die Funktion fread_s liest bis zu den count-Elementen mit elementSize Bytes aus dem Eingabe-stream und speichert diese im buffer. Der Dateizeiger, der (falls vorhanden) zugeordnet stream ist, wird um die Anzahl der gelesenen Bytes fread_s erweitert. Wenn der angegebene Datenstrom im Textmodus geöffnet wird, werden Wagenrücklauf-Zeilenvorschubpaare durch einzeilige Einzugszeichen ersetzt. Dieser Vorgang hat keine Auswirkung auf den Dateizeiger oder den Rückgabewert. Die Position des Dateizeigers ist unbestimmt, wenn ein Fehler auftritt. Der Wert eines teilweise gelesenen Elements kann nicht bestimmt werden.

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

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

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;
   }
}
Contents of buffer before write/read:
        zyxwvutsrqponmlkjihgfe

Wrote 22 items

Number of 11-byte elements read = 2

Contents of buffer after write/read:
        zyxwvutsrqponmlkjihgfe

Siehe auch

Stream-E/A
fwrite
_read