Udostępnij za pośrednictwem


fread

Odczytuje dane ze strumienia.

Składnia

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

Parametry

buffer
Lokalizacja przechowywania danych.

size
Rozmiar elementu w bajtach.

count
Maksymalna liczba elementów do odczytania.

stream
Wskaźnik do FILE struktury.

Wartość zwracana

fread Zwraca liczbę pełnych elementów odczytanych przez funkcję, która może być mniejsza niż count w przypadku wystąpienia błędu lub jeśli napotka koniec pliku przed osiągnięciem countwartości . feof Użyj funkcji orferror, aby odróżnić błąd odczytu od warunku końca pliku. Jeśli size wartość lub count ma wartość 0, zwraca wartość 0, fread a zawartość buforu pozostaje niezmieniona. Jeśli stream lub buffer jest wskaźnikiem o wartości null, fread wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, ta funkcja ustawia errno wartość EINVAL i zwraca wartość 0.

Aby uzyskać więcej informacji na temat kodów zwracanych, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja fread odczytuje maksymalnie count elementy bajtów z danych wejściowych size stream i przechowuje je w pliku buffer. Wskaźnik pliku skojarzony z stream (jeśli istnieje) jest zaawansowany przez liczbę odczytanych bajtów fread . Jeśli dany strumień jest otwarty w trybie tekstowym, nowe linie w stylu systemu Windows są konwertowane na nowe linie w stylu unix. Oznacza to, że pary powrotu karetki (CRLF) są zastępowane znakami jednowierszowego źródła danych (LF). Zamiana nie ma wpływu na wskaźnik pliku ani wartość zwracaną. Pozycja wskaźnika pliku jest nieokreślona, jeśli wystąpi błąd. Nie można określić wartości częściowego elementu odczytu.

W przypadku użycia w strumieniu trybu tekstowego, jeśli ilość żądanych danych (tj size * count. ) jest większa lub równa wewnętrznemu FILE * rozmiarowi buforu (domyślnie rozmiar to 4096 bajtów, konfigurowalny przy użyciu setvbuf), dane strumienia są kopiowane bezpośrednio do buforu dostarczonego przez użytkownika, a konwersja nowego wiersza jest wykonywana w tym buforze. Ponieważ przekonwertowane dane mogą być krótsze niż dane strumienia skopiowane do buforu, dane przeszłości buffer[return_valuesize * ] (gdzie return_value jest zwracaną wartością z fread) mogą zawierać niekonwertowane dane z pliku. Z tego powodu zalecamy, aby dane znaków o wartości null kończyły się w lokalizacji buffer[return_value * size], jeśli intencją buforu jest działanie jako ciąg w stylu C. Zobacz fopen , aby uzyskać szczegółowe informacje na temat wpływu trybu tekstowego i trybu binarnego.

Ta funkcja blokuje inne wątki. Jeśli potrzebujesz wersji nieblokającej, użyj polecenia _fread_nolock.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Function Wymagany nagłówek
fread <stdio.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

We/Wy strumienia
We/Wy pliku trybu tekstowego i binarnego
fopen
fwrite
_read