Sdílet prostřednictvím


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í errnoEINVAL hodnotu 0 a vrátí hodnotu 0.

Další informace o návratových kódech naleznete v tématu errno, _doserrno, _sys_errlista _sys_nerr.

Poznámky

Funkce fread čte z vstupu streamcount 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_valuesize * ] (kde return_value je návratová hodnota) freadobsahovat nepřevrácená data ze souboru. Z tohoto důvodu doporučujeme ukončit znaková data s hodnotou null na bufferadrese [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