E/S en la Librería
Estándar
Introducción
Inicialmente las utilidades C++
de E/S derivan de las utilizadas en C (en realidad eran las mismas). En C estas
utilidades están localizadas en el fichero <stdio.h>,
que contiene casi un tercio del total de funciones de la Librería C Estándar,
que precisamente debe su nombre a su contenido ("Standar Input
Output"). Las E/S C se mantienen en C++ por compatibilidad, aunque
recientemente el fichero el fichero de cabecera ha pasado a denominarse <cstdio>.
Cuando C++ pasó a ser algo más
que un preprocesador, comenzó a presentar su propio tratamiento de las
entradas/salidas. Como no podía ser menos, el enfoque C++ del asunto es
encapsular las funcionalidades de E/S en una serie de clases, conocidas con el
nombre genérico de iostreams y organizadas en una jerarquía. istreams si son flujos de entrada; ostreams si son de salida, e iostreams si son bidireccionales.
Nota: más concretamente, clases genéricas (plantillas), en
las que el tipo de carácter es uno de los argumentos de la plantilla y que se
agrupan en un conjunto de cabeceras propias y distintas del antiguo. Este
diseño permite que puedan manejarse flujos de caracteres sencillos (tipo char) o de caracteres en
cualquier otro lenguaje para el que un carácter venga representado por un wchar_t. Incluso con
juegos de objetos, similares a caracteres, definidos por el usuario.
En concreto, las clases
C++ encargadas de manejar E/S a fichero (filestreams) utilizan la técnica denominada RAII de forma
que la creación de un flujo, que se concreta en instanciar un objeto, puede
llevar aparejada la apertura del fichero correspondiente. Una vez realizadas
las operaciones E/S, aplicando los métodos correspondientes sobre el objeto, no
hay que preocuparse de que el fichero quede abierto, porque es cerrado
automáticamente por el destructor.
La colección de plantillas antes mencionada, fue
oficializada en la última revisión del Estándar con el nombre de Librería de
Entrada/Salida ("Input/output Library" o "iostream
Library"). Contiene los componentes necesarios para las E/S de los
programas C++, y se concreta en
una serie de ficheros de cabecera agrupados según la funcionalidad de los
algoritmos. Son los siguientes:
Funcionalidad
|
Fichero/s
|
Declaraciones adelantadas. Comprende la declaración de 20 clases
genéricas (plantillas) y 28 typedefs.
|
<iosfwd>
|
Descripción de clases estándar para manejo de E/S.
|
<iostream>
|
Definición de las superclases que actúan como raíz en la librería anterior.
|
<ios>
|
Almacenamiento de flujos ("Stream buffers"). Define los
tipos que controlan la capa de transporte.
|
<streambuf>
|
Formateo y manipulación de flujos.
El fichero <istream> define
entidades para controlar la entrada desde un flujo. <ostream> define entidades
para controlar la salida.<iomanip> define los
manipuladores estándar.
|
<istream>
<ostream>
<iomanip>
|
Flujos de cadenas ("String streams").
La cabecera <sstream> define
cuatro clases genéricas y seis tipos que asocian flujos con objetos de la
clase basic_string.
|
<sstream>
<cstdlib>
|
Flujos de fichero ("File streams")
La cabecera <fstream> define
cuatro clases genéricas y seis tipos que asocian flujos con ficheros,
facilitando la lectura y escritura de ficheros.
Existen tres clases para flujos de E/S
genéricos:
|
<fstream>
<cstdio>
<cwchar>
|
- basic_istream
para flujos de entrada
- basic_ostream
para flujos de salida
- basic_iostream para flujos bidireccionales
librería<ios>
Clase base para toda la
jerarquía de clases de flujos en la biblioteca de entrada / salida estándar,
que describe la parte más básica de una corriente que es común a todos los
objetos de flujo, independientemente de su tipo de carácter. No tiene constructores
públicos, y por lo tanto no hay objetos de esta clase se puede declarar. Tanto ios_base y su clase derivada basic_ios define los componentes de las corrientes que no
dependen de si la corriente es una entrada o un flujo de salida: ios_base describe los miembros independientes de los parámetros
de plantilla (es decir, el tipo de carácter y rasgos), mientras que basic_ios describe los miembros que dependen de ellos. Más específicamente, la ios_base.
Para comenzar un programa de
<iostream>, librería <iomanip> que es una rama de la librería o biblioteca base <ios>.
Clases:
Ios- clara
Establece un nuevo valor
para internos de la corriente de las banderas del estado de error. El valor actual de las banderas se sobrescribe: Todos
los bits se sustituyen por los de estado; Si el estado es goodbit(Que
es cero) todos los indicadores de error se borran. En el caso de que ningún bufer de la secuencia está asociada con la
corriente cuando esta función se llama, la badbit indicador se establece de forma automática (no importa
el valor para ese bit pasa en el argumento del Estado). Tenga en
cuenta que cambiar el estado puede lanzar una excepción, en función de los últimos ajustes que se
pasan a miembro de excepciones. El estado actual se puede
conseguir con la función de miembro de rdstate
.
ejemplo:
Ios-copyfmt:
Llamar a esta función
invoca todas las funciones registradas a través del miembro register_callback dos.
En primer lugar, antes de que comience el
proceso de copia, la función de devolución de llamada llama a cada
registrada fn usando (* fn) (erase_event, * esto, índice). Entonces,
al final, justo antes de la mascara de excepciones se copia, la función llama
a cada domicilio de devolución de llamada fn wirh (* fn) (copyfmt_event, * esto,
índice) (esta segunda ronda se puede
utilizar, por ejemplo, para acceder y modificar la copiado matriz extensible interno).
Ejemplo:
Ios-excepciones:
La primera
forma (1) devuelve el actual máscara de excepción para la
corriente. La segunda forma (2) establece un nuevo máscara
de excepción para la corriente y borra de la corriente de indicadores de estado de error(como si el miembro clara ) fue llamado). La máscara de
excepción es un valor interno mantenido por todos los objetos de flujo
se especifique para qué indicadores del estado de excepción de tipo de miembro fracaso(O algún tipo derivado) se lanza cuando se establece.
Ejemplo:
Ios-relleno:
La primera forma (1) devuelve el carácter de relleno.
La
segunda forma (2) establece fillch como el nuevo carácter de relleno y devuelve el carácter de relleno utilizado antes de la llamada. El carácter de relleno es el carácter utilizado por las
funciones de inserción de salida para llenar los espacios cuando el relleno
resultados a la anchura del
campo. El manipulador
paramétrico setfill también se puede utilizar para establecer el carácter de relleno.
Ejemplo:
Ios-buena:
Comprueba si el estado de la corriente es buena
Devuelve verdadero si
ninguna de la corriente de indicadores del estado de
error (eofbit, failbit y badbit.)
Ejemplo:
Ios-bool operador:
Devuelve si una bandera de
error se establece (ya sea failbit o badbit). Observe
que esta función no devuelve el mismo que el miembro buena, Pero lo
opuesto del miembro fallar.
Ejemplo:
Ios-rdbuf:
La primera forma (1) devuelve un puntero al búfer de la secuencia objeto actualmente asociada con la
corriente. La segunda forma (2) también establece el objeto apuntado
por sb como
el búfer de la secuencia asociada con la corriente y borra los indicadores del estado de error. Si sb es un puntero nulo, la función ajusta automáticamente labadbit indicadores del estado de error (que puede lanzar una excepción si el miembro excepciones se ha pasadobadbit). Algunas clases de flujos derivados
(tales como
stringstream y fstream) Mantener su propia memoria de flujo interno, al que están asociados en la construcción. Llamar a esta función para cambiar el búfer de la secuencia asociada no tendrá efecto en ese búfer de la secuencia interna: la corriente tendrá un búfer de la secuencia asociada, que es diferente de su búfer de la secuencia interna (aunque las operaciones de entrada / salida de flujos de utilizar siempre el búfer de la secuencia asociada, devuelto por esta función de miembro).
stringstream y fstream) Mantener su propia memoria de flujo interno, al que están asociados en la construcción. Llamar a esta función para cambiar el búfer de la secuencia asociada no tendrá efecto en ese búfer de la secuencia interna: la corriente tendrá un búfer de la secuencia asociada, que es diferente de su búfer de la secuencia interna (aunque las operaciones de entrada / salida de flujos de utilizar siempre el búfer de la secuencia asociada, devuelto por esta función de miembro).
Ejemplo:
Ios-rdstate:
Devuelve los internos
actuales indicadores del
estado de error de la
corriente. Los internos de
indicadores del estado de error se
establecen automáticamente mediante llamadas a funciones de entrada / salida en
la corriente para señalar errores.
Ejemplo:
Ios-empate:
Obtener / set corriente atada
La primera
forma (1) devuelve un puntero al flujo de salida de atado. La
segunda forma (2) vincula el objeto atiestr y devuelve un
puntero al flujo de atado antes de la llamada, en su
caso. La corriente atada es un objeto de flujo de salida que
se tiraba antes de cada operación de E / S en este
objeto de secuencia.
Ejemplo
Y para terminar otro programa combinando
las ramas de la librería <iso>
<iomanip> y <cmath>
No hay comentarios.:
Publicar un comentario