fread_s
Načte data z datového proudu.Tato verze programu fread obsahuje vylepšení zabezpečení, jak je popsáno 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 pro čtení v bajtech.count
Maximální počet položek, které chcete číst.stream
Ukazatel na strukturu FILE.
Vrácená hodnota
fread_sVrátí počet (celých) položek, které byly načítat do vyrovnávací paměti, která může být nižší než count Pokud je zaznamenána chyba čtení nebo konec souboru před count je dosaženo.Použití feof nebo ferror funkce pro odlišení od podmínku ukončení souboru chybu.Pokud size nebo count 0, fread_s vrátí hodnotu 0 a obsah vyrovnávací paměti jsou beze změny.Pokud stream nebo buffer je nulový ukazatel, fread_s vyvolá obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametru.Pokud je povoleno pokračovat v provádění, tato funkce nastaví errno k 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 přečte až count zboží elementSize bajtů ze vstupu stream a ukládá je v buffer. Ukazatel souboru, který je spojen s stream (pokud existuje) je zvýšen počet bajtů, které jsou skutečně k přečtení.Pokud daný datový proud je otevřen v textovém režimu, carriage return – linefeed páry jsou nahrazeny znaky jednoho konce řádku.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í ostatních vláken.Pokud požadujete verzi bez uzamčení, použijte _fread_nolock.
Požadavky
Funkce |
Požadované záhlaví |
---|---|
fread_s |
<stdio.h> |
Další informace o kompatibilitě naleznete v tématu Kompatibilita.
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;
}
}