fread
Membaca data dari aliran.
Sintaks
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Parameter
buffer
Lokasi penyimpanan untuk data.
size
Ukuran item dalam byte.
count
Jumlah maksimum item yang akan dibaca.
stream
Penunjuk ke FILE
struktur.
Nilai hasil
fread
mengembalikan jumlah item lengkap yang dibaca fungsi, yang mungkin kurang dari count
jika terjadi kesalahan, atau jika menemukan akhir file sebelum mencapai count
. feof
Gunakan fungsi atau ferror
untuk membedakan kesalahan baca dari kondisi akhir file. Jika size
atau count
0, fread
mengembalikan 0 dan konten buffer tidak berubah. Jika stream
atau buffer
adalah penunjuk null, fread
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 pengembalian, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi membaca fread
hingga count
item size
byte dari input stream
dan menyimpannya di buffer
. Penunjuk file yang terkait dengan stream
(jika ada) dimajukan dengan jumlah byte fread
yang dibaca. Jika aliran yang diberikan dibuka dalam mode teks, baris baru gaya Windows dikonversi menjadi baris baru bergaya Unix. Artinya, pasangan umpan baris kembali (CRLF) carriage digantikan oleh karakter umpan baris tunggal (LF). Penggantian tidak berpengaruh pada penunjuk file atau nilai pengembalian. Posisi penunjuk file tidak ditentukan jika terjadi kesalahan. Nilai item baca sebagian tidak dapat ditentukan.
Ketika digunakan pada aliran mode teks, jika jumlah data yang diminta (yaitu, size
* count
) lebih besar dari atau sama dengan ukuran buffer * internal FILE
(secara default ukurannya adalah 4096 byte, dapat dikonfigurasi dengan menggunakan setvbuf
), data aliran disalin langsung ke buffer yang disediakan pengguna, dan konversi baris baru dilakukan di buffer tersebut. Karena data yang dikonversi mungkin lebih pendek dari data aliran yang disalin ke dalam buffer, data melewati buffer
[return_value
size
* ] (di mana return_value
adalah nilai pengembalian dari fread
) mungkin berisi data yang tidak dikonversi dari file. Untuk alasan ini, kami sarankan Anda menghentikan data karakter null di buffer
[return_value
* size
] jika niat buffer adalah untuk bertindak sebagai string gaya C. Lihat fopen
untuk detail tentang efek mode teks dan mode biner.
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
Fungsi | Header yang diperlukan |
---|---|
fread |
<stdio.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );
}
else
printf( "Problem opening the file\n" );
if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb
Lihat juga
Streaming I/O
I/O file mode teks dan biner
fopen
fwrite
_read