Clase filebuf

La declaración de esta clase está en el fichero fstream.

Esta clase se base en la clase streambuf, y le proporciona las funciones necesarias para manipular entrada y salida de caracteres en ficheros.

Las funciones de entrada y salida de istream y ostream hacen llamadas a funciones de filebuf, mediante el puntero a filebuf que existe en la clase ios.

Constructores

filebuf::filebuf();
filebuf::filebuf(int fd);
filebuf::filebuf(int fd, char *, int n);

La primera forma crea un filebuf que no está asociado a ningún fichero.

La segunda forma crea un filebuf asociado a un fichero mediante el descriptor fd.

La tercera forma crea un filebuf asociado a un fichero especificado mediante el descriptor fd y asociado a un buffer buf de tamaño n bytes. Si n es cero o negativo, el filebuf es sin buffer.

Nota: he comprobado que algunos compiladores sólo disponen de la primera versión del constructor.

Funciones

Función attach (no siempre disponible)

filebuf* attach(int fd);

El filebuf debe estar cerrado, esta función asocia el filebuf a otro fichero especificado mediante el descriptor fd.

Función close

filebuf* close();

Actualiza la información actualmente en el buffer y cierra el fichero. En caso de error, retorna el valor 0.

Función fd (no siempre disponible)

int fd();

Devuelve el descriptor de fichero o EOF.

Función is_open

int is_open();

Si el fichero está abierto devuelve un valor distinto de cero.

Función open

filebuf* open(const char *name, int mode, 
   int prot = filebuf::openprot);

Abre un fichero para un objeto de una clase específica, con el nombre name. Para el parámetro mode se puede usar el enum open_mode definido en la clase ios.

Parámetro mode Efecto
ios::app (append) Se coloca al final del fichero antes de cada operación de escritura.
ios::ate (at end) Se coloca al final del stream al abrir el fichero.
ios::binary Trata el stream como binario, no como texto.
ios::in Permite operaciones de entrada en un stream.
ios::out Permite operaciones de salida en un stream.
ios::trunc (truncate) Trunca el fichero a cero al abrirlo.

El parámetro prot se corresponde con el permiso de acceso DOS y es usado siempre que no se indique el modo ios::nocreate. Por defecto se usa el permiso para leer y escribir. En algunas versiones de las bibliotecas de streams no existe este parámetro, ya que está íntimamente asociado al sistema operativo.

Función overflow

virtual int overflow(int = EOF);

Vacía un buffer a su destino. Todas las clases derivadas deben definir las acciones necesarias a realizar.

Función seekoff

virtual streampos seekoff(streamoff offset, 
   ios::seek_dir, int mode);

Mueve el cursor del fichero a una posición relativa offset a la posición actual en la dirección indicada por seek_dir.

Para seek_dir se usan los valores definidos en el enum seek_dir de la clase ios.

Valor Significado
ios::beg Desplazamiento desde el principio del fichero
ios::cur Desplazamiento desde la posición actual del puntero
ios::end Desplazamiento desde el final del fichero

Cuando se especifica un valor negativo como desplazamiento, éste se hace en la dirección del comienzo del fichero desde la posición actual o desde el final del fichero.

El parámetro mode indica el tipo de movimiento en el área de entrada o salida del buffer interno mediante los valores ios::in, ios::out o ambos.

Cuando esta función virtual se redefine en una clase derivada, debe desplazarse en el stream, y no en el buffer del miembro streambuffer interno.

Función setbuf

virtual streambuf* setbuf(char*, int);

Especifica un buffer del tamaño indicado para el objeto. Cuando se usa como un strstreambuf y la función se sobrecarga, el primer argumento no tiene sentido, y debe ponerse a cero.

Función sync

virtual int sync();

Sincroniza las estructuras de datos internas y externas del stream.

Función underflow

virtual int underflow();

Hace que la entrada esté disponible. Se llama a esta función cuando no hay más datos disponibles en el buffer de entrada. Todas las clases derivadas deben definir las acciones a realizar.

Clase istream

La declaración de esta clase está en el fichero iostream.h.

Proporciona entrada con y sin formato desde una clase derivada de streambuf via ios::bp.

El operador >> está sobrecargado para todos los tipos fundamentales, y puede formatear los datos.

La clase istream proporciona el código genérico para formatear los datos después de que son extraídos desde el stream de entrada.

Constructor

istream(streambuf *);

Asocia una clase derivada dada de streambuf a la clase que proporciona un stream de entrada. Esto se hace asignando ios::bp al parámetro del constructor.

Función rdbuf (protegida)

void eatwhite();

Extrae espacios en blanco consecutivos.

Función gcount

int gcount();

Devuelve el número de caracteres sin formato de la última lectura. Las lecturas sin formato son las realizadas mediante las funciones get, getline y read.

Función get

int get();
istream& get(char*, int len, char = '\n');
istream& get(char&);
istream& get(streambuf&, char = '\n');

La primera forma extrae el siguiente carácter o EOF si no hay disponible ninguno.

La segunda forma extrae caracteres en la dirección proporcionada en el parámetro char* hasta que se recibe el delimitador del tercer parámetro, el fin de fichero o hasta que se leen len-1 bytes. Siempre se añade un carácter nulo de terminación en la cadena de salida. El delimitador no se extrae desde el stream de entrada. La función sólo falla si no se extraen caracteres.

La tercera forma extrae un único carácter en la referencia a char proporcionada.

La cuarta forma extrae caracteres en el streambuf especificado hasta que se encuentra el delimitador.

Función getline

istream& getline(char*, int, char = '\n');

Extrae caracteres hasta que se encuentra el delimitador y los coloca en el buffer, elimina el delimitador del stream de entrada y no lo añade al buffer.

Función ignore

istream& ignore(int n = 1, int delim = EOF);

Hace que los siguientes n caracteres en el stream de entrada sean ignorados; la extracción se detiene antes si se encuentra el delimitador delim.

El delimitador también es extraído del stream.

Función ipfx

istream& ipfx(int n = 0);

Esta función es previamente llamada por las funciones de entrada para leer desde un stream de entrada. Las funciones que realizan entradas con formato la llaman como ipfx(0); las que realizan entradas sin formato la llaman como ipfx(1).

Función peek

int peek();

Devuelve el siguiente carácter sin extraerlo del stream.

Función putback

istream& putback(char);

Devuelve un carácter al stream.

Función read

istream& read(char*, int);

Extrae el número indicado de caracteres en el array char*. Se puede usar la función gcount() para saber el número de caracteres extraídos si ocurre algún error.

Función seekg

istream& seekg(streampos pos);
istream& seekg(streamoff offset, seek_dir dir);

La primera forma se mueve a posición absoluta, tal como la proporciona la función tellg.

La segunda forma se mueve un número offset de bytes la posición del cursor del stream relativa a dir. Este parámetro puede tomar los valores definidos en el enum seek_dir: {beg, cur, end};

Para streams de salida usar ostream::seekp.

Usar seekpos o seekoff para moverse en un buffer de un stream.

Función tellg

long tellg();

Devuelve la posición actual del stream.

Clase ostream

La declaración de esta clase está en el fichero iostream.h.

Proporciona salida con y sin formato a un streambuf.

Un objeto de la clase ostream no producirá la salida actual, pero sus funciones miembro pueden llamar a las funciones miembro de la clase apuntada por bp para insertar caracteres en el stream de salida.

El operador << da formato a los datos antes de enviarlos a bp.

La clase ostream proporciona el código genérico para formatear los datos antes de que sean insertados en el stream de salida.

Constructor

ostream(streambuf *buf);

Asocia el streambuf dado a la clase, proporcionando un stream de salida. Esto se hace asignando el puntero ios::bp a buf.

Función flush

ostream& flush();

Vacía el buffer asociado al stream. Procesa todas las salidas pendientes.

Función opfx

int opfx();

Esta función es llamada por funciones de salida para antes de hacer una inserción en un stream de salida. Devuelve cero si el ostream tiene un estado de error distinto de cero. En caso contrario, opfx devuelve un valor distinto de cero.

Función osfx

void osfx();

Realiza operaciones de salida (post?). Si está activado ios::unitbuf, osfx vacía el buffer de ostream. En caso de error, osfx activa el flag ios::failbit.

Función put

ostream& put(char ch);

Inserta un carácter en el stream de salida.

Función seekp

ostream& seekp(streampos);
ostream& seekp(streamoff, seek_dir);

La primera forma mueve el cursor del stream a una posición absoluta, tal como la devuelve la función tellp.

La segunda forma mueve el cursor a una posición relativa desde el punto indicado mediante el parámetro seek_dir, que puede tomar los valores del enum seek_dir: beg, cur, end.

Función tellp

streampos tellp();

Devuelve la posición absoluta del cursor del stream.

Función write

ostream& write(const char*, int n);

Inserta n caracteres (aunque sean nulos) en el stream de salida.

Clase iostream

La declaración de esta clase está en el fichero iostream.h.

Esta clase está derivada de istream y ostream, es una mezcla de sus clases base, y permite realizar tanto entradas como salidas en un stream. Además es la base para otras clases como fstream y strstream.

El stream se implementa mediante la clase ios::bp a la que apunta. Dependiendo del tipo de clase derivada a la que apunta bp, se determina si los streams de entrada y salida pueden ser el mismo.

Por ejemplo, si iostream usa un filebuf podrá hacer entradas y salidas en el mismo fichero. Si iostream usa un strstreambuf podrá hacer entradas y salidas en la misma o en diferentes zonas de memoria.

Constructor

iostream(streambuf *);

Asocia el streambuf dado a la clase.