fread
Čte data ze streamu.
Syntaxe
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Parametry
buffer
Umístění úložiště pro data
size
Velikost položky v bajtech
count
Maximální počet položek, které se mají přečíst.
stream
Ukazatel na FILE
strukturu.
Vrácená hodnota
fread
vrátí počet úplných položek, které funkce přečte, což může být menší, než count
pokud dojde k chybě, nebo pokud narazí na konec souboru před dosažením count
. feof
K rozlišení chyby čtení od podmínky ukončení souboru použijte funkci nebo ferror
funkci. Pokud size
nebo count
je 0, fread
vrátí hodnotu 0 a obsah vyrovnávací paměti se nezmění. Pokud stream
nebo buffer
je ukazatel null, fread
vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, tato funkce nastaví errno
EINVAL
hodnotu 0 a vrátí hodnotu 0.
Další informace o návratových kódech naleznete v tématu errno
, _doserrno
, _sys_errlist
a _sys_nerr
.
Poznámky
Funkce fread
čte z vstupu stream
až count
položky size
bajtů a ukládá je do buffer
. Ukazatel souboru přidružený stream
(pokud existuje) je rozšířen počtem přečtených fread
bajtů. Pokud je daný datový proud otevřen v textovém režimu, nové čáry ve stylu Windows se převedou na nový řádek ve stylu Unix. To znamená, že dvojice návratového kanálu řádku (CRLF) jsou nahrazeny znaky jednořádkového podávání (LF). Nahrazení nemá žádný vliv na ukazatel souboru ani na vrácenou hodnotu. Umístění ukazatele souboru je neurčité, pokud dojde k chybě. Hodnotu částečně přečtené položky nelze určit.
Pokud se používá u datového proudu textového režimu, je-li množství požadovaných dat (tj size
* count
. ) větší než nebo rovno interní FILE
* velikosti vyrovnávací paměti (ve výchozím nastavení je velikost 4096 bajtů, konfigurovatelná pomocí setvbuf
), data streamu se zkopírují přímo do vyrovnávací paměti poskytnuté uživatelem a v této vyrovnávací paměti se provádí převod newline. Vzhledem k tomu, že převedená data mohou být kratší než data datového proudu zkopírovaná do vyrovnávací paměti, mohou data za buffer
[return_value
size
* ] (kde return_value
je návratová hodnota) fread
obsahovat nepřevrácená data ze souboru. Z tohoto důvodu doporučujeme ukončit znaková data s hodnotou null na buffer
adrese [return_value
* size
], pokud má záměr vyrovnávací paměti fungovat jako řetězec ve stylu jazyka C. Podrobnosti fopen
o efektech textového režimu a binárního režimu
Tato funkce uzamkne další vlákna. Pokud potřebujete verzi bez uzamčení, použijte _fread_nolock
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Function | Požadovaný hlavičkový soubor |
---|---|
fread |
<stdio.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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
Viz také
Vstupně-výstupní operace streamu
Vstupně-výstupní operace souboru textového a binárního režimu
fopen
fwrite
_read