Aracılığıyla paylaş


setvbuf

Akış arabelleği ve arabellek boyutunu denetler.

Sözdizimi

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size
);

Parametreler

stream
Yapı işaretçisi FILE .

buffer
Kullanıcı tarafından ayrılan arabellek.

mode
Arabelleğe alma modu.

size
Bayt cinsinden arabellek boyutu. İzin verilebilen aralık: 2 <= size<= INT_MAX (2147483647). Dahili olarak, için size sağlanan değer 2'nin en yakın katına aşağı yuvarlanır.

Dönüş değeri

Başarılı olursa 0 döndürür.

NULLise stream veya geçerli bir değişiklik içinde değilse sizemode, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlev -1 döndürür ve olarak EINVALayarlanırerrno.

Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.

Açıklamalar

işlevi, setvbuf programın için streamhem arabelleğe alma hem de arabellek boyutunu denetlemesine olanak tanır. stream açıldığından beri G/Ç işlemi yapılmamış açık bir dosyaya başvurması gerekir. tarafından buffer işaret edilen dizi, olmadığı sürece NULLbuffer arabellek olarak kullanılır ve bu durumda setvbuf /2 * 2 bayt uzunluğunda sizeotomatik olarak ayrılmış bir arabellek kullanır.

Mod , _IOLBFveya _IONBFolmalıdır_IOFBF. veya _IOLBFsize ise _IOFBFmode, arabellek boyutu olarak kullanılır. ise mode_IONBF, akış kaldırılmıştır ve her ikisi de sizebuffer yoksayılır. ve anlamları için mode değerler şunlardır:

mode Değer Anlamı
_IOFBF Tam arabelleğe alma; arabellek buffer olarak kullanılır ve size arabellek boyutu olarak kullanılır. ise bufferNULL, bu mod bayt uzunluğunda otomatik olarak ayrılmış bir arabellek size kullanır.
_IOLBF Bazı sistemler için bu mod satır arabelleği sağlar. Ancak, Win32 için davranış - Tam Arabelleğe Alma ile _IOFBF aynıdır.
_IONBF veya sizene olursa olsun buffer arabellek kullanılmaz.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
setvbuf <stdio.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Kitaplıklar

C çalışma zamanı kitaplıklarının tüm sürümleri.

Örnek

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

Ayrıca bkz.

Akış G/Ç
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf