Share via


setvbuf

Mise en mémoire tampon et taille de la mémoire tampon de flux de contrôle.

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size 
);

Paramètres

  • stream
    Pointeur vers la structure d' FILE .

  • buffer
    mémoire tampon Utilisateur-allouée.

  • mode
    mode de mise en mémoire tampon.

  • size
    taille de 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 à plusieurs le plus proche de 2.

Valeur de retour

Retourne 0 si l'opération a réussi.

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

Pour plus d'informations sur ces éléments et d'autres codes d'erreur, consultez _doserrno, errno, _sys_errlist, et _sys_nerr.

Notes

La fonction d' setvbuf permet au programme de contrôler la mise en mémoire tampon et la taille de mémoire tampon pour stream.stream doit faire référence à un fichier ouvert qui n'a pas subi une opération d'E/S puisqu'elle a été ouverte.Le tableau désignée par buffer est utilisée comme mémoire tampon, à moins qu'il ne NULL, dans ce 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é lorsque la taille de la mémoire tampon.Si mode est _IONBF, le flux est non tamponné et size et buffer sont ignorés.Les valeurs de mode et leurs significations sont :

  • _IOFBF
    mise en mémoire tampon complète ; autrement dit, buffer est utilisé lorsque la mémoire tampon et size est utilisée lorsque la taille de la mémoire tampon.Si buffer est NULL, les octets alloués automatiquement d' size d'une mémoire tampon long est utilisé.

  • _IOLBF
    Pour certains systèmes, cela fournit la mise en mémoire tampon de ligne.Toutefois, pour Win32, le comportement est identique à _IOFBF - mise en mémoire tampon.

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

Configuration requise

routine

en-tête requis

setvbuf

<stdio.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

bibliothèques

toutes les versions de 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 l' exemples d'appel de code non managé.

Voir aussi

Référence

E/S de flux

fclose, _fcloseall

fflush

le fopen, _wfopen

setbuf