Namespaces
Variants

std::basic_filebuf<CharT,Traits>:: setbuf

From cppreference.net
protected :
virtual std:: basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n )

Si s est un pointeur nul et n est zéro, le filebuf devient non tamponné pour la sortie, ce qui signifie que pbase() et pptr() sont nuls et que toute sortie est immédiatement envoyée au fichier.

Sinon, un appel à setbuf() remplace le tampon interne (la séquence de caractères contrôlée) par le tableau de caractères fourni par l'utilisateur dont le premier élément est pointé par s et permet à cet objet std::basic_filebuf d'utiliser jusqu'à n octets dans ce tableau pour la mise en tampon.

Cette fonction est protégée virtuelle, elle ne peut être appelée qu'à travers pubsetbuf() ou depuis les fonctions membres d'une classe définie par l'utilisateur dérivée de std::basic_filebuf .

Table des matières

Paramètres

s - pointeur vers le premier CharT dans le tampon fourni par l'utilisateur ou null
n - le nombre d'éléments CharT dans le tampon fourni par l'utilisateur ou zéro

Valeur de retour

this

Notes

Les conditions dans lesquelles cette fonction peut être utilisée et la manière dont le tampon fourni est utilisé sont définies par l'implémentation.

  • GCC 4.6 libstdc++
setbuf() ne peut être appelée que lorsque le std::basic_filebuf n'est pas associé à un fichier (n'a aucun effet sinon). Avec un tampon fourni par l'utilisateur, la lecture depuis le fichier lit n-1 octets à la fois.
  • Clang++3.0 libc++
setbuf() peut être appelée après l'ouverture du fichier, mais avant toute opération d'E/S (sinon risque de plantage). Avec un tampon fourni par l'utilisateur, la lecture du fichier lit les plus grands multiples de 4096 qui tiennent dans le tampon.
  • Visual Studio 2010
setbuf() peut être appelée à tout moment, même après qu'une opération d'E/S ait eu lieu. Le contenu actuel du tampon, s'il y en a, est perdu.

La norme ne définit aucun comportement pour cette fonction, sauf que setbuf ( 0 , 0 ) appelée avant toute opération d'E/S doit configurer la sortie non tamponnée.

Exemple

Fournit un tampon de 10k pour la lecture. Sous Linux, l'utilitaire strace peut être utilisé pour observer le nombre réel d'octets lus.

#include <fstream>
#include <iostream>
#include <string>
int main()
{
    int cnt = 0;
    std::ifstream file;
    char buf[10241];
    file.rdbuf()->pubsetbuf(buf, sizeof buf);
    file.open("/usr/share/dict/words");
    for (std::string line; getline(file, line);)
        ++cnt;
    std::cout << cnt << '\n';
}

Sortie possible :

356010

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 173 C++98 le type de n était incorrectement spécifié comme int corrigé en std::streamsize

Voir aussi

invoque setbuf ( )
(fonction membre publique de std::basic_streambuf<CharT,Traits> )
définit le tampon et sa taille pour un flux de fichier
(fonction)