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.
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.
filebuf* attach(int fd);
El filebuf debe estar cerrado, esta función asocia el filebuf a otro fichero especificado mediante el descriptor fd.
filebuf* close();
Actualiza la información actualmente en el buffer y cierra el fichero. En caso de error, retorna el valor 0.
int fd();
Devuelve el descriptor de fichero o EOF.
int is_open();
Si el fichero está abierto devuelve un valor distinto de cero.
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 librerías de streams no existe este parámetro, ya que está íntimamente asociado al sistema operativo.
virtual int overflow(int = EOF);
Vacía un buffer a su destino. Todas las clases derivadas deben definir las acciones necesarias a realizar.
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.
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.
virtual int sync();
Sincroniza las estructuras de datos internas y externas del stream.
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.
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.
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.
void eatwhite();
Extrae espacios en blanco consecutivos.
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.
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.
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.
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.
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).
int peek();
Devuelve el siguiente carácter sin extraerlo del stream.
istream& putback(char);
Devuelve un carácter al stream.
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.
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.
long tellg();
Devuelve la posición actual del stream.
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.
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.
ostream& flush();
Vacía el buffer asociado al stream. Procesa todas las salidas pendientes.
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.
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.
ostream& put(char ch);
Inserta un carácter en el stream de salida.
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.
streampos tellp();
Devuelve la posición absoluta del cursor del stream.
ostream& write(const char*, int n);
Inserta n caracteres (aunque sean nulos) en el stream de salida.
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.
iostream(streambuf *);
Asocia el streambuf dado a la clase.
© Noviembre de 2001 Salvador Pozo, salvador@conclase.net