setvbuf
Controlla il buffering del flusso e le dimensioni del buffer.
Sintassi
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Parametri
stream
Puntatore alla struttura FILE
.
buffer
Buffer allocato dall'utente.
mode
Modalità di buffering.
size
Dimensioni del buffer in byte. Intervallo consentito: 2 <= size
<= INT_MAX (2147483647). Internamente, il valore specificato per size
viene arrotondato per difetto al multiplo di 2 più prossimo.
Valore restituito
Restituisce 0 in caso di esito positivo.
Se stream
è NULL
o se mode
o size
non rientra in una modifica valida, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, questa funzione restituisce -1 e imposta errno
su EINVAL
.
Per informazioni su questi e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Osservazioni:
La funzione setvbuf
consente al programma di controllare sia il buffering che le dimensioni del buffer per stream
. stream
deve fare riferimento a un file aperto che non ha subito un'operazione di I/O dall'apertura. La matrice a cui buffer
punta viene usata come buffer, a meno che buffer
non sia NULL
, nel qual caso setvbuf
usa un buffer allocato automaticamente di lunghezza size
/2 * 2 byte.
La modalità deve essere _IOFBF
, _IOLBF
o _IONBF
. Se mode
è _IOFBF
o _IOLBF
, viene usato size
come dimensioni del buffer. Se mode
è _IONBF
, il flusso non viene memorizzato nel buffer e entrambi size
e buffer
vengono ignorati. I valori per mode
e i rispettivi significati sono:
Valore mode |
significato |
---|---|
_IOFBF |
Buffering completo, ovvero buffer viene usato come buffer e size viene usato come dimensioni del buffer. Se buffer è NULL , questa modalità usa un buffer allocato automaticamente lungo size i byte. |
_IOLBF |
Per alcuni sistemi, questa modalità fornisce il buffer delle righe. Tuttavia, per Win32, il comportamento è lo stesso di _IOFBF - buffering completo. |
_IONBF |
Non viene usato alcun buffer, indipendentemente da buffer o size . |
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
setvbuf |
<stdio.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Librerie
Tutte le versioni delle librerie di runtime C.
Esempio
// 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
Vedi anche
I/O di flusso
fclose
, _fcloseall
fflush
fopen
, _wfopen
setbuf