fread_s
Čte data z datového proudu.Tato verze fread obsahuje rozšíření zabezpečení popsaným v Funkce zabezpečení v CRT.
size_t fread_s(
void *buffer,
size_t bufferSize,
size_t elementSize,
size_t count,
FILE *stream
);
Parametry
buffer
Umístění úložiště pro data.bufferSize
Velikost cílové vyrovnávací paměti v bajtech.elementSize
Velikost položky čtení v bajtech.count
Maximální počet položek ke čtení.stream
Ukazatel na FILE struktury.
Vrácená hodnota
fread_sVrací číslo (celé) položky, které byly čtení do vyrovnávací paměti, která může být menší než count Pokud je zjištěna chyba čtení nebo na konec souboru před count je dosaženo.Použití feof nebo ferror funkce odlišit od konce souboru podmínku chyby.Pokud size nebo count 0, fread_s vrátí 0 a obsah vyrovnávací paměti nezměněny.Pokud stream nebo buffer je nulový ukazatel fread_s vyvolá obsluhu neplatný parametr popsaným v Ověření parametrů.Pokud je povoleno pokračovat v provádění, tato funkce nastaví errno na EINVAL a vrátí hodnotu 0.
Další informace o chybových kódech naleznete v tématu _doserrno, kód chyby, _sys_errlist a _sys_nerr.
Poznámky
fread_s Funkce čte až count položky elementSize bajtů od vstupní stream a ukládá je v buffer.Ukazatel souboru, který je spojen s stream (pokud existuje) je zvýšen počet skutečně čtení bajtů.Daný datový proud je otevřen v textovém režimu, přepravu return–linefeed dvojice nahrazeny znaky konce řádku jeden.Nahrazení nemá žádný vliv na ukazatele souboru nebo vrácené hodnoty.Pozice ukazatele souboru je neurčité, pokud dojde k chybě.Nelze zjistit hodnotu částečně čtení položky.
Tato funkce uzamčení jiných podprocesů.Pokud požadujete verzi zamykání, _fread_nolock.
Požadavky
Function |
Požadované záhlaví |
---|---|
fread_s |
<stdio.h> |
Další informace o kompatibilitě, viz Compatibility.
Příklad
// crt_fread_s.c
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c
//
// This program opens a file that's named FREAD.OUT and
// writes characters to the file. It then tries to open
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
#define BUFFERSIZE 30
#define DATASIZE 22
#define ELEMENTCOUNT 2
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)
#define FILENAME "FREAD.OUT"
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
for ( i = 0; i < DATASIZE; i++ )
list[i] = (char)('z' - i);
list[DATASIZE] = '\0'; // terminal null so we can print it
// Open file in text mode:
if( fopen_s( &stream, FILENAME, "w+t" ) == 0 )
{
// Write DATASIZE characters to stream
printf( "Contents of buffer before write/read:\n\t%s\n\n", list );
numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );
printf( "Wrote %d items\n\n", numwritten );
fclose( stream );
} else {
printf( "Problem opening the file\n" );
return -1;
}
if( fopen_s( &stream, FILENAME, "r+t" ) == 0 ) {
// Attempt to read in characters in 2 blocks of 11
numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );
printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );
printf( "Contents of buffer after write/read:\n\t%s\n", list );
fclose( stream );
} else {
printf( "File could not be opened\n" );
return -1;
}
}