Share via


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

Baca juga

Streaming I/O
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf