Namespaces
Variants

std:: setbuf

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
void setbuf ( std:: FILE * stream, char * buffer ) ;

Définit le tampon interne à utiliser pour les opérations d'E/S effectuées sur le flux C stream .

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

Si buffer est nul, équivalent à std:: setvbuf ( stream, nullptr, _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. S'il n'est pas nul, doit pouvoir contenir au moins BUFSIZ caractères

Valeur de retour

(aucun)

Notes

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

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

Cette fonction ne peut être utilisée qu'après que stream ait été associé à un fichier ouvert, mais avant toute autre opération (à l'exception d'un appel échoué à std::setbuf / std::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()
{
    char buf[BUFSIZ];
    std::setbuf(stdin, buf);
} // durée de vie de buf se termine, comportement indéfini

Exemple

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

#include <chrono>
#include <cstdio>
#include <thread>
int main()
{
    using namespace std::chrono_literals;
    std::setbuf(stdout, nullptr); // unbuffered stdout
    std::putchar('a'); // appears immediately on unbuffered stream
    std::this_thread::sleep_for(1s);
    std::putchar('b');
}

Sortie :

ab

Voir aussi

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