setvbuf
Mengontrol buffering aliran dan ukuran buffer.
Sintaks
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Parameter
stream
Penunjuk ke FILE
struktur.
buffer
Buffer yang dialokasikan pengguna.
mode
Mode buffering.
size
Ukuran buffer dalam byte. Rentang yang diperbolehkan: 2 <= size
<= INT_MAX (2147483647). Secara internal, nilai yang disediakan untuk size
dibulatkan ke bawah ke kelipatan terdekat dari 2.
Nilai hasil
Mengembalikan 0 jika berhasil.
Jika stream
adalah NULL
, atau jika mode
atau size
tidak berada dalam perubahan yang valid, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi ini mengembalikan -1 dan diatur errno
ke EINVAL
.
Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi ini setvbuf
memungkinkan program untuk mengontrol ukuran buffer dan buffer untuk stream
. stream
harus merujuk ke file terbuka yang belum menjalani operasi I/O sejak dibuka. Array yang dialokasikan oleh buffer
digunakan sebagai buffer, kecuali buffer
jika adalah , dalam hal setvbuf
ini NULL
menggunakan buffer panjang size
yang dialokasikan secara otomatis /2 * 2 byte.
Mode harus _IOFBF
, , _IOLBF
atau _IONBF
. Jika mode
adalah _IOFBF
atau _IOLBF
, maka size
digunakan sebagai ukuran buffer. Jika mode
adalah _IONBF
, aliran tidak dibuffered, dan keduanya size
dan buffer
diabaikan. Nilai untuk mode
dan maknanya adalah:
mode nilai |
Makna |
---|---|
_IOFBF |
Buffering penuh; yaitu, buffer digunakan sebagai buffer dan size digunakan sebagai ukuran buffer. Jika buffer adalah NULL , mode ini menggunakan buffer yang dialokasikan secara otomatis yang size panjang byte. |
_IOLBF |
Untuk beberapa sistem, mode ini menyediakan buffering garis. Namun, untuk Win32, perilakunya sama dengan _IOFBF - Buffering Penuh. |
_IONBF |
Tidak ada buffer yang digunakan, terlepas dari buffer atau size . |
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
setvbuf |
<stdio.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka
Semua versi pustaka run-time C.
Contoh
// crt_setvbuf.c
// This program opens two streams: stream1
// and stream2. It then uses setvbuf to give stream1 a
// user-defined buffer of 1024 bytes and stream2 no buffer.
//
#include <stdio.h>
int main( void )
{
char buf[1024];
FILE *stream1, *stream2;
if( fopen_s( &stream1, "data1", "a" ) == 0 &&
fopen_s( &stream2, "data2", "w" ) == 0 )
{
if( setvbuf( stream1, buf, _IOFBF, sizeof( buf ) ) != 0 )
printf( "Incorrect type or size of buffer for stream1\n" );
else
printf( "'stream1' now has a buffer of 1024 bytes\n" );
if( setvbuf( stream2, NULL, _IONBF, 0 ) != 0 )
printf( "Incorrect type or size of buffer for stream2\n" );
else
printf( "'stream2' now has no buffer\n" );
_fcloseall();
}
}
'stream1' now has a buffer of 1024 bytes
'stream2' now has no buffer
Baca juga
Streaming I/O
fclose
, _fcloseall
fflush
fopen
, _wfopen
setbuf
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk