Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 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 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 _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 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