Freigeben über


fread

Liest Daten aus einem Stream

Syntax

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

Parameter

buffer
Speicherort für Daten.

size
Elementgröße in Bytes

count
Maximale Anzahl der zu lesenden Elemente.

stream
Zeiger zur FILE -Struktur.

Rückgabewert

fread gibt die Anzahl der vollständigen Elemente zurück, die die Funktion gelesen hat, die kleiner sein kann als count wenn ein Fehler auftritt, oder wenn das Ende der Datei auftritt, bevor sie erreicht wird count. Verwenden Sie die Funktionen feof oder ferror, um einen Lesefehler von einer Dateiendebedingung zu unterscheiden. Wenn size oder count 0 ist, gibt fread 0 zurück, und die Pufferinhalte bleiben unverändert. Wenn stream es sich um buffer einen Nullzeiger handelt, fread 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 Rückgabecodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Hinweise

Die Funktion fread liest bis zu den count-Elementen mit size Bytes aus dem Eingabe-stream und speichert diese im buffer. Der Dateizeiger, der (sofern vorhanden) zugeordnet stream ist, wird um die Anzahl der gelesenen Bytes fread erweitert. Wenn der angegebene Datenstrom im Textmodus geöffnet wird, werden Newlines im Windows-Stil in Unix-Stil-Newlines konvertiert. Das heißt, Wagenrücklauf-Zeilenvorschubpaare (CRLF) werden durch einzelne Zeilenvorschubzeichen (Single Line Feed, LF) 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.

Wenn sie für einen Textmodusdatenstrom verwendet wird, wenn die angeforderte Datenmenge (d size * count. h. ) größer oder gleich der internen FILE * Puffergröße ist (standardmäßig beträgt die Größe 4096 Byte, konfigurierbar mithilfe setvbuf), werden Datenstromdaten direkt in den vom Benutzer bereitgestellten Puffer kopiert, und die Neulinienkonvertierung erfolgt in diesem Puffer. Da die konvertierten Daten möglicherweise kürzer sind als die datenstromdaten, die in den Puffer kopiert wurden, können Daten über buffer[return_valuesize * ] (wobei return_value der Rückgabewert von fread) nicht konvertierte Daten aus der Datei enthalten. Aus diesem Grund empfiehlt es sich, Zeichendaten mit Null-Ende bei buffer[return_value * size] zu beenden, wenn der Zweck des Puffers darin besteht, als Zeichenfolge im C-Stil zu fungieren. Ausführliche Informationen zu den Auswirkungen des Textmodus und des Binärmodus finden Sie fopen unter.

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. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Funktion Erforderlicher Header
fread <stdio.h>

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

Beispiel

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

Siehe auch

Stream-E/A
Text- und Binärmodusdatei-E/A
fopen
fwrite
_read