fread_s

Odczytuje dane ze strumienia. Ta wersja programu ma ulepszenia zabezpieczeń fread zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

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

Parametry

buffer
Lokalizacja przechowywania danych.

bufferSize
Rozmiar buforu docelowego w bajtach.

elementSize
Rozmiar elementu do odczytu w bajtach.

count
Maksymalna liczba elementów do odczytania.

stream
Wskaźnik do FILE struktury.

Wartość zwracana

fread_s Zwraca liczbę (całych) elementów, które zostały odczytane do buforu, co może być mniejsze niż count w przypadku wystąpienia błędu odczytu lub zakończenia pliku przed count osiągnięciem. feof Użyj funkcji orferror, aby odróżnić błąd od warunku końca pliku. Jeśli size wartość lub count ma wartość 0, zwraca wartość 0, fread_s a zawartość buforu pozostaje niezmieniona. Jeśli stream lub buffer jest wskaźnikiem o wartości null, fread_s wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, ta funkcja ustawia errno wartość EINVAL i zwraca wartość 0.

Aby uzyskać więcej informacji na temat kodów błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Uwagi

Funkcja fread_s odczytuje maksymalnie count elementy bajtów z danych wejściowych elementSizestream i przechowuje je w pliku buffer. Wskaźnik pliku skojarzony z stream (jeśli istnieje) jest zaawansowany przez liczbę odczytanych bajtów fread_s . Jeśli dany strumień jest otwarty w trybie tekstowym, pary zestawienia powrotu karetki są zastępowane znakami jednowierszowego kanału informacyjnego. Zamiana nie ma wpływu na wskaźnik pliku ani wartość zwracaną. Pozycja wskaźnika pliku jest nieokreślona, jeśli wystąpi błąd. Nie można określić wartości częściowego elementu odczytu.

Ta funkcja blokuje inne wątki. Jeśli wymagana jest wersja nieblokowania, użyj polecenia _fread_nolock.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Function Wymagany nagłówek
fread_s <stdio.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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 też

We/Wy strumienia
fwrite
_read