Condividi tramite


setvbuf

Controlla il buffering del flusso e la dimensione del buffer.

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 valido: 2 <= size <= INT_MAX (2147483647). Internamente, il valore fornito per size viene arrotondato per difetto al multiplo di 2 più vicino.

Valore restituito

Restituisce 0 in caso di esito positivo.

Se stream è NULL, o se mode o size non è all'interno di una modifica valida, il gestore di parametro non valido viene richiamato, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, questa funzione restituisce -1 ed imposta errno a EINVAL.

Per ulteriori informazioni su questi, e altri, codici di errore vedere _doserrno, errno, _sys_errlist, and _sys_nerr .

Note

La funzione setvbuf consente al programma di controllare sia il buffer che la dimensione del buffer per stream. stream deve fare riferimento ad un file aperto non sottoposto ad un'operazione di I/O da quando è stato aperto. La matrice puntata da buffer viene utilizzata come il buffer, a meno che non sia NULL, nel qual caso setvbuf utilizza un buffer allocato automaticamente della lunghezza di size/2 * 2 byte.

La modalità deve essere _IOFBF, _IOLBF, o _IONBF. Se mode è _IOFBF o _IOLBF, quindi size viene utilizzato come la dimensione del buffer. Se mode è _IONBF, il flusso è privo di buffer e size e buffer vengono ignorati. I valori per mode e i relativi significati sono:

  • _IOFBF
    Buffer completo; ovvero buffer viene utilizzato come il buffer e size viene utilizzato come la dimensione del buffer. Se buffer è NULL, viene utilizzato automaticamente un buffer di lunghezza size byte.

  • _IOLBF
    Per alcuni sistemi, questo fornisce la linea di buffering. Tuttavia, per Win32, il comportamento sarà uguale a _IOFBF - Buffer Completo.

  • _IONBF
    Nessun buffer viene utilizzato, indipendentemente da buffer o da size.

Requisiti

Routine

Intestazione obbligatoria

setvbuf

<stdio.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

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();
   }
}
  

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

I/O di flusso

fclose, _fcloseall

fflush

fopen, _wfopen

setbuf