Posteado por: wozgeass | mayo 11, 2010

ANSI C — biblioteca stdio


En esta ocacion me gustaria agregar hacer una pequeña pausa a los post de programando de C para linux y agaregar esta otra seccion, desde hace un tiempo personas de otros lados me han pedido que se publiquen tambien las funsiones del ANSI C.

Asi que antes de iniciar con esta seccion me gustaria explicar que es ANSI C.

ANSI Es una organizacion sin animo de lucro que supervisa el desarrollo de estandares para productos, servicios, procesos y sistemas en los Estados Unidos, es miembro de la Organizacion Internacional para la Estandarizacion(ISO) y de la Comision de Electrotecnica Internacional(IEC).

Y por logica ANSI C es un estandar de los tantos que podemos encontrar de C y que es por lo general es el mas usado, mi intencion no es dar la historia de C asi que si quieren mas del tema hay muchos lugares donde poder investigarlo.

La biblioteca esntandar de ANSI Consta de 24 ficheros cabecera que pueden ser incluidos en un proyecto de programacion con una simple directiva. Cada cabecera contiene la declaracion de una no mas funciones, tipos de datos y macros.

En comparacion con otros lenguajes de programacion (java) la biblioteca estandar es muy pequeña, esta proporciona un conjunto basico de funciones matematicas, de tratamiento de cadenas, conversiones de tipo y entrada/salida por consola o por ficheros. No se incluyen, ni un conjunto de tipos de datos contenedores basicos (listas, pilas, colas …), ni herramientas para crear una interfaz grafica (GUI), ni operaciones para trabajar en red, no otras funcionalidades que lenguaje java ofrece de manera estandar. La principal ventaja del reducido tamaño de las biblioteca estantdar de C es que construir un entorno de trabajo en ANSI C es muy facil y, en consecuencia, portar un programa en ANSI C de una plataforma a otra es relativamente sencillo.

No todas son malas noticias, en el transcurso de toda la vida del lenguaje C se han creado muchas otras bibliotecas para proporcionar mayor funcionalidad equivalente a otros lenguajes de programacion. Uno de los mas notables proyectos de desarrolo del entorno de escritorio de GNOME creo las librerias GTK+ Y Glib con funcionalidades para desarrollar y trabajar con interfaces graficas de usuario. La variedad de bibliotecas disponibles ha hecho que, a lo largo de la historia, haya quedado demostrada la superioridad de algunas de estas herramientas. El gran inconveniente es que a menudo no funcionan especialmente bien en conjunto, normalmente son los propios programadores familiarizados con las diferentes bibliotecas quienes consiguen sacarle maximo partido, aunque diferentes partes de ellas puedan estar disponibles en cualquier plataforma.

Iniciando con la cabeceras que incluye ANSI C.

<assert.h>  – – > Contiene la macro assert, utilizada para detectar errores lógicos y otros tipos de fallos en la depuracion de un programa.

<complex.h> – – > Contiene un conjunto de funciones para manipular numero complejos.

<ctype.h>  – – > Contiene funciones para clasificar caracteres segun sus tipos o para convertir entre mayusculas y minusculas independientemente del conjunto de caracteres.

<errno.h> – – > Para testear los codigos de error devueltos por las funciones de las distintas bibliotecas.

<fenv.h> – – > Para controlar entornos en coma flotante.

<float.h> – – > Contiene la definicion de constantes que especifican ciertas propiedades de la biblioteca de coma flotante, como la diferencia minima entre dos numeros en coma flotante, el numero maximo de digitos de precision, o el rango de valores que se pueden representar.

<inttypes.h> – – > Para operaciones de conversion con precision entre tipos enteros.

<iso646.h> – – > Para utilizar los conjuntos de caracteres Especiales ISO 646.

<limits.h> – – > Contiene la definicion de constantes que especifican ciertas propiedades de los tipos de enteros, como rango de valores que se pueden representar(_MIN, _MAX).

<locale.h> – – > Se utiliza para seleccionar el entorno local apropiado.

<math.h> – – > Contiene las funciones matematicas comunes.

<setjmp.h> – – > Declara algunas macros setjmp y longjmp para proporcionar saltos de flujos de control de programas no locales.

<signal.h> – – > Para controlar algunas situaciones excepcionales como la divicion por cero.

<stdarg.h> – – > Posibilita el acceso de una cantidad variable de argumentos pasados a una funcion.

<stdbool.h> – – > Libreria para un tipo booleano.

<stdint.h> – – > Para definir varios tipos de enteros.

<stddef.h> – – > Define varios tipos de macros de utilidad.

<stdio.h> – – > La que explicare en este post…

<stdlib.h> – – > Para realizar ciertas operaciones como conversion de tipos, generacion de numeros pseudo-aleatorios, gestion de memoria dinamica, control de procesos, funciones de entorno, de señalizacion, de ordenamiento y busqueda.

<string.h> – – > Para manipulacion de cadenas de caracteres.

<tgmath.h> – – > Contiene funcionalidades matematicas de tipo generico.

<time.h> – – > Para tratamiento y conversion entre formato de fecha y hora.

<wchar.h> – – > Para manipular flujos de datos anchos y varias clases de cadenas de caracteres anchos, necesarios para soportar caracteres de diferentes idiomas.

<wctpe.h> – – > Para clasificar caracteres anchos.

Ya que sabemos todo esto es hora de entrar a la que nos interesa.

BIBLIOTECA STDIO.

Podemos usarla poniendola de esta manera en nuestros programas:

#include <stdio.h>

stdio -> Una libreria que contiene funciones de entrada/salida estandar.

Proporciona una interfaz de flujo(Stream) utilizando un sistema de buffers(memoria intermedia) simple y eficiente.

La entrada y la salida se mapean en flujos logicos de datos y las caracteristicas fisicas de E/S permanecen ocultas para el programador. Un flujo se asocia con un archivo externo (el cual debe estar en un dispositivo fisico) abriendo un archivo, el cual se supone que debe ser creado. Crear un archivo existente hara que dicho archivo quede vacio. Si un archivo soporta posicionamiento (como un archivo en disco, y en contraposicion a lo que en un archivo en terminal) entonces un marcador de posicion asociado al flujo se situara al principio del archivo (byte cero), a no ser que el archivo sea abierto en modo añadir (append). Si se utiliza esta ultima modalidad de apertura, el marcador de posicion sera situado al final del archivo, el indicador de posicion se mantiene en sucesivas lecturas, escrituras y reposicionamiento. Todas las entradas se hacen como si los caracteres hubieran sido leidos mediante sucesivas llamadas a la funcion fgetc todas la salidas se producen como si todos los caracteres fueran leidos mediante llamadas sucesivas a la funcion fputc.

Un archivo se desentiende de un flujo cerrado dicho archivo. Los flujos de salida son descargados (todo el contenido de la memoria intermedia que no fue escrita al archivo, se transmite en ese momento) antes de que el flujo se desentienda del fichero. El valor de un puntero que apunta a un objeto FILE es indeterminado tras el cierre del archivo.

Un archivo sera reabierto repetidamente, por la misma u otras ejecuciones de un programa, y sus contenidos seran leidos o modificados (si se puede reposicionar al principio). Si la funcion main() retorna a quien llamo el programa, o se utiliza la funcion exit() todo los archivos abiertos seran cerrados (Consecuentemente todos los flujos de salida seran descargados sobre sus respetivos ficheros) anates de que se produzca el cierre efectivo del programa. Otras formas de terminar un programa como abort no se preocupan de cerrar los archivos apropiadamente.

Cuando el programa comienza, tres flujos de texto se inician por defecto y no necesitan ser abiertas explicitamente –entrada estandar(stdin) (para la lectura de la entrada convencional), – salida estandar(stdout) (para la escritura de la salida convencional) y – salida de error estandar(stderr) (para la salida de diagnostico). Estos flujos se abrevian, respectivamente, como stdin, stdout, stderr. Una vez abierta, el flujo de errores estandar no utiliza memoria intermedia totalmente; los flujos estandar de entrada y salida lo haran solamente en el casi de que dicho flujo no hagan referencia a un dispositivo interactivo.

Los flujos de salida se hacen referencia a dispositivos de tipo terminal, siempre utilizan memorias intermedias linelaes por defecto; durante la salida hacia cada flujo se escribe automaticamente a un flujo de entrada que hace referencia al dispositivo terminal que lee. En los casos donde requieren una enorme cantidad de calculos, despues de imprimir parde de una linea en un terminal de salida, es necesario efectuar una descarga de la memoria intermedia en el flujo de salida estandar mediante fflush() antes de dejarlo y comenzar los calculos para que la salida aparezca.

La biblioteca stdio es parte de la biblioteca libc y las rutinas se cargan automaticamente segun son necesitados por los compiladores.

FUNCIONES                         DESCRIPCION.

clearerr          –>          Comprueba y reinicia el estado del flujo.

fclose          –>          Cierra un flujo.

fdopen          –>          funciones de apertura de flujo.

feof          –>          Comprueba y reinicia el estado del flujo.

ferror          –>          Comprueba y reinicia el estado del flujo.

fflush          –>          Descarga la memoria intermedia del flujo sobre el fichero.

fgetc         –>          recoge el proximo caracter de un flujo de entrada.

fileno          –>          Comprueba y reinicia el estado del flujo.

fopen          –>          Funciones de apertura de flujo.

fprintf          –>          Conversion para salida formateada.

fpurge          –>          Descarga el buffer de un flujo sobre el fichero.

fputc          –>          Enviar un caracter o una palabra a un flujo.

fputs          –>         Enviar una linea a un flujo.

fread          –>          Entrada/salida binaria.

freopen          –>          Funcion de apertura de un flujo.

fropen          –>          Abre un flujo.

fscanf          –>          Conversion para entrada con formato.

fseek          –>          Reposiciona un flujo.

fsetpos          –>          Reposiciona un flujo.

ftell          –>           Reposiciona un flujo

fwrite          –>          Entrada/Salida binaria.

getc          –>          Recoge el proximo caracter o palabra de un flujo de entrada.

getchar          –>          Recoge el proximo caracter o palabra de un flujo de entrada

gets          –>           Recoge una linea de un flujo.

getw          –>          Recoge el proximo caracter o palabra de un flujo de entrada.

mktemp          –>           Crea un nombre de archivo termporal(unico).

perror          –>           Mensajes de error del sistema.

printf           –>           Conversion para salida formateada.

putc           –>           Envia un caracter o palabra a un flujo.

putchar          –>          Envia un caracter o palabra a un flujo.

puts          –>          Envia una linea a un flujo.

putw          –>          Envia un caracter o palabra a un flujo.

remove          –>         Elimina una entrada de directorio.

rewind          –>        Reposiciona el flujo.

scanf          –>          Conversion para entrada formateada.

setbuf         –>        Operaciones de flujo con memoria intermedia.

setbuffer        –>        Operaciones de flujo con memoria intermedia.

setlinebuf       –>         Operaciones de flujo con memoria intermedia.

setvbuf          –>         Operaciones de flujo con memoria intermedia.

sprintf          –>          Conversion para salida formateada.

sscanf          –>          Conversion para entrada formateada.

strerror          –>          Mensajes de error del sistema.

sys_errlist          –>         Mensajes de error del sistema.

sys_nerr          –>          Mensajes de error del sistema.

tempnam          –>          Rutinas para archivador temporal.

tmpfile         –>         Rutinas para archivador temporal.

tmpnam          –>         Rutinas para archivado temporal.

ungetc          –>         Ingnora un caracter de un flujo de entrada.

vfprintf          –>         Conversion para salida formateada.

vfscanf          –>         Conversion para entrada formateada.

vprintf          –>        Conversion para salida formateada.

vscanf          –>          Conversion para entrada formateada.

vsprintf          –>          Conversion para salida formateada.

vsscanf           –>        Conversion para entrada formateada.

espera la segunda parte de este post donde explicare a detallae los macros y las funciones que contiene esta libreria asi como ejemplos.

^_^ !





Anuncios

Responses

  1. Que buena entrada!

    Hace rato que no me paseaba por aqui, así que ya te agregue al RSS.

  2. gracias, en verdad aprecio tu comenario =D!


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: