Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 NULLmenggunakan buffer panjang sizeyang dialokasikan secara otomatis /2 * 2 byte.
Mode harus _IOFBF, , _IOLBFatau _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
Lihat juga
Streaming I/O
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf