setvbuf

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Contrôle la taille de mémoire tampon et de mise en mémoire tampon du flux.

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 mémoire tampon en octets. Plage autorisée : 2 <=></=> size<= INT_MAX (2147483647). int_max=""></= INT_MAX (2147483647).> En interne, la valeur fournie pour size est arrondie au multiple plus proche de 2.

Retourne 0 si l’opération réussit.

Si stream est NULL, ou si mode ou size est pas lors d’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 retourne -1 et affecte errno à EINVAL.

Pour plus d’informations sur les autres codes d’erreur, consultez _doserrno, errno, _sys_errlist et _sys_nerr.

Le setvbuf fonction permet au programme de contrôler à la fois mise en mémoire tampon et la taille de la mémoire tampon stream. streamdoit faire référence à un fichier ouvert qui n’a pas subi une opération d’e/s, car il a été ouvert. Le tableau vers lequel pointe buffer est utilisé en tant que la mémoire tampon, sauf s’il est NULL, auquel cas setvbuf utilise une mémoire tampon alloué automatiquement de longueur size/2 * 2 octets.

Le mode doit être _IOFBF, _IOLBF, ou _IONBF. Si mode est _IOFBF ou _IOLBF, puis size est utilisé en tant que la taille de la mémoire tampon. Si mode est _IONBF, le flux est tamponné et size et buffer sont ignorés. Valeurs de mode et leurs significations sont :

_IOFBF
Mise en mémoire tampon complète ; Autrement dit, buffer est utilisé en tant que la mémoire tampon et size est utilisé en tant que la taille de la mémoire tampon. Si buffer est NULL, une mémoire tampon allouée automatiquement size octets de long est utilisé.

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

_IONBF
Aucune mémoire tampon n’est utilisé, quel que soit le buffer ou size.

RoutineEn-tête requis
setvbuf<stdio.h>

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

Toutes les versions des bibliothèques Runtime C.

// 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  

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

Flux d’e/s
fclose, _fcloseall
fflush
fopen, _wfopen
setbuf

Afficher: