Partager via


setvbuf

Contrôle le chargement du flux et de la taille du tampon.

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 au multiple de 2 inférieur à cette valeur le plus proche.

Valeur de retour

En cas de réussite, retourne 0.

Si stream est NULL, ou si mode ou size n'est pas dans une modification valide, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, cette fonction renvoie -1 et définit errno à la valeur EINVAL.

Pour plus d'informations sur ces codes d'erreur et autres, consultez _doserrno, errno, _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 de stream. stream doit faire référence à un fichier ouvert qui n' a pas subi d'opération d'E/S depuis qu'il a été ouvert. Le tableau référencé par buffer est utilisé comme mémoire tampon, sauf s'il s'agit de NULL, auquel 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 est _IOFBF ou _IOLBF, alors size est utilisé comme taille de la mémoire tampon. Si mode est _IONBF, le flux de données n'est pas tamponné et size et buffer sont ignorés. Les valeurs de mode et leurs significations sont :

  • _IOFBF
    Mise en mémoire tampon saturée ; autrement dit, buffer est utilisé en tant que tampon et size est utilisée comme taille de la mémoire tampon. Si buffer est NULL, une mémoire tampon automatiquement allouée de size octets de long est utilisée.

  • _IOLBF
    Pour certains systèmes, cela fournit une mémoire tampon de ligne. Toutefois, pour Win32, le comportement est le même que _IOFBF - mise en mémoire tampon saturée.

  • _IONBF
    Aucune mémoire tampon est utilisée, indépendamment de buffer ou de size.

Configuration requise

Routine

En-tête requis

setvbuf

<stdio.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

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();
   }
}
  

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Voir aussi

Référence

E/S de flux

fclose, _fcloseall

fflush

fopen, _wfopen

setbuf