setvbuf

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

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

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). int_max=""></= INT_MAX (2147483647).> Internamente, el valor proporcionado para size se redondea hacia abajo al múltiplo más cercano de 2.

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

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

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

El setvbuf función permite al programa controlar tanto el almacenamiento en búfer y tamaño de búfer para stream. streamdebe hacer referencia a un archivo abierto que no hayan sufrido una operación de E/S desde que se abrió. La matriz señalada por buffer sirve como búfer, a menos que sea NULL, en cuyo caso setvbuf utiliza un búfer de longitud asignado automáticamente size/2 * 2 bytes.

El modo debe ser _IOFBF, _IOLBF, o _IONBF. Si mode es _IOFBF o _IOLBF, a continuación, size se utiliza como el tamaño del búfer. Si mode es _IONBF, la secuencia es no almacenado en búfer y size y buffer se omiten. Los valores para mode y sus significados son:

_IOFBF
El almacenamiento en búfer completo; es decir, buffer sirve como búfer y size se utiliza como el tamaño del búfer. Si buffer es NULL, un búfer asignado automáticamente size se utiliza una longitud de bytes.

_IOLBF
En algunos sistemas, esto proporciona el almacenamiento en búfer en línea. Sin embargo, para Win32, el comportamiento es el mismo que _IOFBF -el búfer completo.

_IONBF
No hay ningún búfer utilizado, independientemente del buffer o size.

RutinaEncabezado necesario
setvbuf<stdio.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

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

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

No es aplicable. Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

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

Mostrar: