Namespaces
Variants

setbuf

De fr.cppreference.net
< c | io
 
 
Entrée/sortie de fichier
Types et objets
        
Fonctions
Accès aux fichiers
(C95)
Entrée/sortie non formatée
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrée formatée
Entrée/sortie directe
Sortie formatée
Positionnement dans le fichier
Gestion des erreurs
Opérations sur les fichiers
 
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 sur le flux. Il doit mesurer au moins BUFSIZ caractères.

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

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

Paramètres

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

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 (autre qu'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);
} // lifetime of buf ends, undefined behavior

Exemple

setbuf peut être utilisé pour désactiver la mise en tampon sur les flux qui nécessitent 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 C23 (ISO/IEC 9899:2024) :
  • 7.21.5.5 La fonction setbuf (p : à déterminer)
  • Norme C17 (ISO/IEC 9899:2018) :
  • 7.21.5.5 La fonction setbuf (p : 225)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.21.5.5 La fonction setbuf (p : 307-308)
  • Norme C99 (ISO/IEC 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)
Documentation C++ pour setbuf