fread_s

Membaca data dari aliran. Versi fread ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

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

Parameter

buffer
Lokasi penyimpanan untuk data.

bufferSize
Ukuran buffer tujuan dalam byte.

elementSize
Ukuran item yang akan dibaca dalam byte.

count
Jumlah maksimum item yang akan dibaca.

stream
Penunjuk ke FILE struktur.

Nilai hasil

fread_s mengembalikan jumlah item (keseluruhan) yang dibaca ke dalam buffer, yang mungkin kurang dari count jika kesalahan baca atau akhir file ditemui sebelum count tercapai. feof Gunakan fungsi atau ferror untuk membedakan kesalahan dari kondisi akhir file. Jika size atau count 0, fread_s mengembalikan 0 dan konten buffer tidak berubah. Jika stream atau buffer adalah penunjuk null, fread_s memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi ini diatur errno ke EINVAL dan mengembalikan 0.

Untuk informasi selengkapnya tentang kode kesalahan, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi membaca fread_s hingga count item elementSize byte dari input stream dan menyimpannya di buffer. Penunjuk file yang terkait dengan stream (jika ada) dimajukan dengan jumlah byte fread_s yang dibaca. Jika aliran yang diberikan dibuka dalam mode teks, pasangan umpan baris kembali pengangkutan diganti dengan karakter umpan baris tunggal. Penggantian tidak berpengaruh pada penunjuk file atau nilai pengembalian. Posisi penunjuk file tidak ditentukan jika terjadi kesalahan. Nilai item baca sebagian tidak dapat ditentukan.

Fungsi ini mengunci utas lain. Jika Anda memerlukan versi non-penguncian, gunakan _fread_nolock.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Function Header yang diperlukan
fread_s <stdio.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

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

Baca juga

Streaming I/O
fwrite
_read