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.
NULL
ise stream
veya geçerli bir değişiklik içinde değilse size
mode
, 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 EINVAL
ayarlanırerrno
.
Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
işlevi, setvbuf
programın için stream
hem 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 NULL
buffer
arabellek olarak kullanılır ve bu durumda setvbuf
/2 * 2 bayt uzunluğunda size
otomatik olarak ayrılmış bir arabellek kullanır.
Mod , _IOLBF
veya _IONBF
olmalıdır_IOFBF
. veya _IOLBF
size
ise _IOFBF
mode
, arabellek boyutu olarak kullanılır. ise mode
_IONBF
, akış kaldırılmıştır ve her ikisi de size
buffer
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 buffer NULL , 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 size ne 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