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 è NULLo 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_errliste _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