Partager via


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 NULLle 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 NULLle 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 _IONBFle 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 NULLle 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

Voir aussi

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