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