EVAP2-IIME-3

                     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 errorEl valor actual de las banderas se sobrescribe: Todos los bits se sustituyen por los de estadoSi 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 errorSi 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).
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