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 count
wartoś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_errlist
i _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_value
size
* ] (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