Namespaces
Variants

setbuf

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
void setbuf ( FILE * stream, char * buffer ) ;
(jusqu'à C99)
void setbuf ( FILE * restrict stream, char * restrict buffer ) ;
(depuis C99)
#define BUFSIZ     /*unspecified*/

Définit le tampon interne à utiliser pour les opérations de flux. Il doit avoir une longueur d'au moins BUFSIZ caractères.

Si buffer n'est pas nul, équivalent à setvbuf ( stream, buffer, _IOFBF , BUFSIZ ) .

Si buffer est nul, équivalent à setvbuf ( stream, NULL , _IONBF , 0 ) , ce qui désactive la mise en mémoire tampon.

Table des matières

Paramètres

stream - le flux de fichier auquel définir le tampon
buffer - pointeur vers un tampon pour le flux à utiliser. Si un pointeur nul est fourni, la mise en tampon est désactivée

Valeur de retour

Aucun.

Notes

Si BUFSIZ n'est pas la taille de tampon appropriée, setvbuf peut être utilisé pour la modifier.

setvbuf devrait également être utilisé pour détecter les erreurs, car setbuf n'indique pas le succès ou l'échec.

Cette fonction ne peut être utilisée qu'après que stream a été associé à un fichier ouvert, mais avant toute autre opération (à l'exception d'un appel échoué à setbuf / setvbuf ).

Une erreur courante consiste à définir le tampon de stdin ou stdout sur un tableau dont la durée de vie se termine avant la fin du programme :

int main(void) {
    char buf[BUFSIZ];
    setbuf(stdin, buf);
} // la durée de vie de buf se termine, comportement indéfini

Exemple

setbuf peut être utilisé pour désactiver la mise en mémoire tampon des flux nécessitant une sortie immédiate.

#include <stdio.h>
#include <threads.h>
int main(void)
{
    setbuf(stdout, NULL); // unbuffered stdout
    putchar('a'); // 'a' appears immediately if stdout is unbuffered
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
    putchar('b'); 
}

Sortie :

ab

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.21.5.5 La fonction setbuf (p. 225)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.21.5.5 La fonction setbuf (p: 307-308)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.19.5.5 La fonction setbuf (p. 273)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.9.5.5 La fonction setbuf

Voir aussi

définit le tampon et sa taille pour un flux de fichier
(fonction)