setvbuf
Contrôle la mise en mémoire tampon du flux et la taille de la mémoire tampon.
Syntaxe
int setvbuf(
FILE *stream,
char *buffer,
int mode,
size_t size
);
Paramètres
stream
Pointeur vers la structure FILE
.
buffer
Mémoire tampon allouée par l’utilisateur.
mode
Mode de mise en mémoire tampon.
size
Taille de la mémoire tampon en octets. Plage autorisée : 2 <= size
<INT_MAX (2147483647). En interne, la valeur fournie pour size
est arrondie vers le bas au multiple de 2 le plus proche.
Valeur retournée
Retourne 0 en cas de réussite.
Si stream
c’est NULL
le cas ou size
s’il mode
n’est pas dans une modification valide, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à se poursuivre, cette fonction retourne -1 et affecte à errno
la valeur EINVAL
.
Pour plus d’informations sur ces codes et d’autres codes d’erreur, consultez errno
, _doserrno
, _sys_errlist
et _sys_nerr
.
Notes
La fonction setvbuf
permet au programme de contrôler la mise en mémoire tampon et la taille de la mémoire tampon pour stream
. stream
doit faire référence à un fichier ouvert qui n’a pas subi d’opération d’E/S depuis son ouverture. Le tableau pointé par buffer
est utilisé comme mémoire tampon, sauf si buffer
c’est NULL
le cas setvbuf
, utilise une mémoire tampon allouée automatiquement de longueur size
/2 * 2 octets.
Le mode doit être _IOFBF
, _IOLBF
ou _IONBF
. Si mode
a la valeur _IOFBF
ou _IOLBF
, size
est utilisé comme taille de la mémoire tampon. Si mode
c’est _IONBF
le cas, le flux n’est pas débogué et les deux size
et buffer
sont ignorés. Les valeurs de mode
et leur signification sont les suivantes :
Valeur mode |
Signification |
---|---|
_IOFBF |
Mise en mémoire tampon complète. Autrement dit, buffer est utilisé comme mémoire tampon et size comme taille de la mémoire tampon. Si buffer c’est NULL le cas, ce mode utilise une mémoire tampon allouée automatiquement qui est size longue en octets. |
_IOLBF |
Pour certains systèmes, ce mode fournit une mise en mémoire tampon de ligne. Cependant, pour Win32, son comportement est identique à _IOFBF (mise en mémoire tampon complète). |
_IONBF |
Aucune mémoire tampon n’est utilisée, quel que soit le paramétrage de buffer ou size . |
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Routine | En-tête requis |
---|---|
setvbuf |
<stdio.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Bibliothèques
Toutes les versions des bibliothèques Runtime C.
Exemple
// 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