Udostępnij za pośrednictwem


fread_s

Odczytuje dane ze strumienia.Ta wersja fread zawiera ulepszenia zabezpieczeń, jak opisano w Funkcje zabezpieczeń w CRT.

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

Parametry

  • buffer
    Miejsca przechowywania danych.

  • bufferSize
    Rozmiar buforu docelowego w bajtach.

  • elementSize
    Rozmiar elementu do odczytu w bajtach.

  • count
    Maksymalna liczba elementów do odczytu.

  • stream
    Wskaźnik, aby FILE struktury.

Wartość zwracana

fread_sZwraca liczbę (pełne) elementy, które zostały wczytane do buforu, który może być mniejsza niż count jeśli napotka błąd odczytu lub końca pliku przed count zostanie osiągnięty.Użyj feof lub ferror funkcji odróżnienia błąd warunek końca pliku.Jeśli size lub count jest równa 0, fread_s zwraca wartość 0 i zawartość buforu nie ulegną zmianie.Jeśli stream lub buffer jest wskaźnik zerowy, fread_s wywołuje obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, ta funkcja ustawia errno do EINVAL i zwraca wartość 0.

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

Uwagi

fread_s Funkcji odczytuje do count elementów elementSize bajtów w wejściowych danych stream i przechowuje je w buffer.Wskaźnik pliku, który jest skojarzony z stream (jeśli istnieje) jest zwiększona o liczbę bajtów faktycznie odczytanych.Jeśli dany strumień jest otwarty w trybie tekstowym, przewozu ze zmianą wiersza pary są zastępowane znaki wysuwu wiersza jednej.Zastąpienie nie ma wpływu na wskaźnik pliku lub zwracanej wartości.Położenie wskaźnika pliku jest nieokreślony, jeśli wystąpi błąd.Nie można określić wartość częściowo odczytu elementu.

Ta funkcja blokuje się inne wątki.Jeśli wersja blokowania, używaj _fread_nolock.

Wymagania

Funkcja

Wymaganego nagłówka

fread_s

<stdio.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności.

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;
   }
}
  
  
  
  
  
  

Zobacz też

Informacje

Strumień we/wy

fwrite

_read