fread_sfread_s

Odczytuje dane ze strumienia.Reads data from a stream. Ta wersja programu fread zawiera ulepszenia zabezpieczeń, zgodnie z opisem w temacie funkcje zabezpieczeń w CRT.This version of fread has security enhancements, as described in Security Features in the CRT.

SkładniaSyntax

size_t fread_s(
   void *buffer,
   size_t bufferSize,
   size_t elementSize,
   size_t count,
   FILE *stream
);

ParametryParameters

buforubuffer
Lokalizacja magazynu dla danych.Storage location for data.

bufferSizebufferSize
Rozmiar buforu docelowego w bajtach.Size of the destination buffer in bytes.

elementSizeelementSize
Rozmiar elementu, który ma zostać odczytany w bajtach.Size of the item to read in bytes.

liczbącount
Maksymalna liczba elementów, które mają zostać odczytane.Maximum number of items to be read.

produkcyjnestream
Wskaźnik do struktury pliku .Pointer to FILE structure.

Wartość zwracanaReturn Value

fread_s zwraca liczbę (całość) elementów, które zostały odczytane do buforu, co może być mniejsze niż licznik , jeśli wystąpi błąd odczytu lub koniec pliku przed osiągnięciem liczby .fread_s returns the number of (whole) items that were read into the buffer, which may be less than count if a read error or the end of the file is encountered before count is reached. Użyj funkcji feof lub odwołującej , aby odróżnić błąd od stanu końca pliku.Use the feof or ferror function to distinguish an error from an end-of-file condition. Jeśli rozmiar lub Liczba to 0, fread_s zwraca wartość 0, a zawartość buforu nie zmienia się.If size or count is 0, fread_s returns 0 and the buffer contents are unchanged. Jeśli strumień lub bufor jest wskaźnikiem o wartości null, fread_s wywołuje procedurę obsługi nieprawidłowego parametru, zgodnie z opisem w walidacji parametru.If stream or buffer is a null pointer, fread_s invokes the invalid parameter handler, as described in Parameter Validation. Jeśli wykonanie może być kontynuowane, ta funkcja ustawia errno na EINVAL i zwraca wartość 0.If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

Aby uzyskać więcej informacji na temat kodów błędów, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.For more information about error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

UwagiRemarks

Funkcja fread_s odczytuje do liczby elementów elementSize bajtów ze strumienia wejściowego i zapisuje je w buforze.The fread_s function reads up to count items of elementSize bytes from the input stream and stores them in buffer. Wskaźnik pliku skojarzony ze strumieniem (jeśli istnieje) jest zwiększany o liczbę bajtów faktycznie odczytywanych.The file pointer that is associated with stream (if there is one) is increased by the number of bytes actually read. Jeśli dany strumień jest otwarty w trybie tekstowym, pary wysuwu wiersza są zastępowane znakami wysuwu wiersza.If the given stream is opened in text mode, carriage return-line feed pairs are replaced with single line feed characters. Zastąpienie nie ma wpływu na wskaźnik pliku lub wartość zwracaną.The replacement has no effect on the file pointer or the return value. Pozycja wskaźnika pliku jest nieokreślona w przypadku wystąpienia błędu.The file-pointer position is indeterminate if an error occurs. Nie można określić wartości częściowo odczytanego elementu.The value of a partially read item cannot be determined.

Ta funkcja blokuje inne wątki.This function locks out other threads. Jeśli wymagana jest wersja bez blokowania, użyj _fread_nolock.If you require a non-locking version, use _fread_nolock.

Domyślnie globalny stan tej funkcji jest objęty zakresem aplikacji.By default, this function's global state is scoped to the application. Aby to zmienić, zobacz stan globalny w CRT.To change this, see Global state in the CRT.

WymaganiaRequirements

FunkcjaFunction Wymagany nagłówekRequired header
fread_sfread_s <stdio.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodność.For additional compatibility information, see Compatibility.

PrzykładExample

// 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;
   }
}
Contents of buffer before write/read:
        zyxwvutsrqponmlkjihgfe

Wrote 22 items

Number of 11-byte elements read = 2

Contents of buffer after write/read:
        zyxwvutsrqponmlkjihgfe

Zobacz takżeSee also

We/Wy strumieniaStream I/O
fwritefwrite
_read_read