setvbuf

Controla el almacenamiento en búfer de la secuencia y el tamaño del búfer.

Sintaxis

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size
);

Parámetros

stream
Puntero a la estructura FILE .

buffer
Búfer asignado por el usuario.

mode
Modo de almacenamiento en búfer.

size
Tamaño del búfer en bytes. Intervalo permitido: 2 <= size<= INT_MAX (2147483647). Internamente, el valor proporcionado para size se redondea hacia abajo al múltiplo más próximo a 2.

Valor devuelto

Si la operación se realiza correctamente, devuelve 0.

Si stream es NULL, o si mode o size no está dentro de un cambio válido, se invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, esta función devuelve -1 y establece errno en EINVAL.

Para información sobre estos y otros códigos de error, consulte errno, _doserrno_sys_errlist y _sys_nerr.

Comentarios

La función setvbuf permite que el programa controle tanto el almacenamiento en búfer como el tamaño del búfer de stream. stream debe hacer referencia a un archivo abierto que no haya sufrido una operación de E/S desde que se abrió. La matriz a buffer la que apunta se usa como búfer, a menos buffer que sea NULL, en cuyo caso setvbuf se usa un búfer asignado automáticamente de longitud size/2 * 2 bytes.

El modo debe ser _IOFBF, _IOLBF o _IONBF. Si mode es _IOFBF o _IOLBF, se usa size como tamaño del búfer. Si mode es _IONBF, la secuencia está sin búfer y se omiten y size buffer . Los valores de mode y sus significados son los siguientes:

Valor de mode Significado
_IOFBF Almacenamiento en búfer completo; es decir, buffer sirve como búfer y size se usa como tamaño del búfer. Si buffer es NULL, este modo usa un búfer asignado automáticamente que es size bytes largos.
_IOLBF En algunos sistemas, este modo proporciona almacenamiento en búfer de líneas. pero para Win32 el comportamiento es el mismo que _IOFBF (almacenamiento en búfer completo).
_IONBF No se usa ningún búfer, independientemente de buffer o size.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
setvbuf <stdio.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Bibliotecas

Todas las versiones de las bibliotecas en tiempo de ejecución de C.

Ejemplo

// 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

Vea también

E/S de secuencia
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf