std::basic_filebuf<CharT,Traits>:: setbuf
|
protected
:
virtual std:: basic_streambuf < CharT, Traits > * setbuf ( char_type * s, std:: streamsize n ) |
||
Si
s
es un puntero nulo y
n
es cero, el filebuf se convierte en
unbuffered
para salida, lo que significa que
pbase()
y
pptr()
son nulos y cualquier salida se envía inmediatamente al archivo.
De lo contrario, una llamada a
setbuf()
reemplaza el buffer interno (la secuencia de caracteres controlada) con el arreglo de caracteres proporcionado por el usuario cuyo primer elemento es apuntado por
s
y permite que este objeto
std::basic_filebuf
utilice hasta
n
bytes en ese arreglo para el almacenamiento en búfer.
Esta función es protegida virtual, solo puede ser llamada a través de
pubsetbuf()
o desde funciones miembro de una clase definida por el usuario derivada de
std::basic_filebuf
.
Contenidos |
Parámetros
| s | - |
puntero al primer
CharT
en el búfer proporcionado por el usuario o nulo
|
| n | - |
el número de elementos
CharT
en el búfer proporcionado por el usuario o cero
|
Valor de retorno
this
Notas
Las condiciones en las que esta función puede utilizarse y la forma en que se utiliza el búfer proporcionado están definidas por la implementación.
- GCC 4.6 libstdc++
-
setbuf()solo puede llamarse cuando el std::basic_filebuf no está asociado con un archivo (no tiene efecto en caso contrario). Con un búfer proporcionado por el usuario, la lectura del archivo leen-1bytes a la vez.
- Clang++3.0 libc++
-
setbuf()puede llamarse después de abrir el archivo, pero antes de cualquier operación de E/S (de lo contrario podría fallar). Con un búfer proporcionado por el usuario, la lectura del archivo lee los múltiplos más grandes de 4096 que quepan en el búfer.
- Visual Studio 2010
-
setbuf()puede ser llamado en cualquier momento, incluso después de que haya ocurrido alguna operación de E/S. El contenido actual del búfer, si existe, se pierde.
El estándar no define ningún comportamiento para esta función excepto que setbuf ( 0 , 0 ) llamado antes de que se haya realizado cualquier operación de E/S debe establecer la salida sin búfer.
Ejemplo
Proporciona un búfer de 10k para lectura. En Linux, se puede utilizar la utilidad strace para observar el número real de bytes leídos.
#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'; }
Salida posible:
356010
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 173 | C++98 | el tipo de n fue especificado incorrectamente como int | corregido a std::streamsize |
Véase también
|
invoca
setbuf
(
)
(función miembro pública de
std::basic_streambuf<CharT,Traits>
)
|
|
|
establece el búfer y su tamaño para un flujo de archivo
(función) |