std::basic_filebuf<CharT,Traits>:: setbuf
|
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 litn-1octets à 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) |