C

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
La versión para imprimir ya no se admite y puede contener errores de representación. Actualiza los marcadores del navegador y utiliza en su lugar la función de impresión predeterminada del navegador.

Este artículo, de momento, es una simple recopilación de información. Para aprender C hay multitud de recursos on-line.

Entrada/Salida

La biblioteca stdio.h declara una amplia variedad de funciones para la entrada y salida de archivos y dispositivos como la consola. Fue una de las primeras bibliotecas de C. Declara más funciones que cualquier otro encabezado estándar y también requiere una explicación más detallada debido a la compleja maquinaria que subyace a las funciones.

Al aparecer Unix y el lenguaje C se consiguió la independencia de dispositivo.


Streams

Tanto la entrada como la salida se realizan por los llamados Streams. Estos son flujos de datos que simplifican el uso de cualquier tipo de dispositivo. Estos pueden ser de dos tipos: Binarios o de texto.

  • Un stream de texto está compuesto de líneas. Una línea es un serie de caracteres que finaliza en un salto de línea.
  • Un stream binario está compuesto de bytes que pueden o no ser representados como letras.

En cualquier caso, nada nos impide poner poner códigos de 8 bits que no sean letras en cualquier fichero. Por lo que esa distinción no se produce a nivel de programación. De hecho, los texto en Unicode pueden utilizar 1, 2 3 o 4 bytes por caracter.

Unix proporciona 3 streams estándar: stdin, stdout, stderr.

FILE

Se trata de una estructura preparada para gestionar ficheros. En teoría no se deben manipular ficheros de otra manera. Tiene sus propios métodos para acceder a ella. Ese comportamiento puede parecer programación orientada a objetos.

Abriendo y cerrando FILE

La biblioteca stdio.h tiene 3 funciones para manejar los ficheros: fopen, freopen y fclose.

#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
FILE *freopen(const char *filename, const char *mode, FILE *stream);

Las dos funciones de abrir usan un string para el nombre del fichero y otro para el modo. Retornan un puntero a un objeto FILE que los controla. En caso de fallo retornan un NULL. La diferencia es que reopen cierra el fichero primero si estaba abierto.

Los modos en los que se puede abrir un archivo:

r           open a text file for reading
w           truncate to zero length or create a text file for writing
a           append; open or create text file for writing at end-of-file
rb          open binary file for reading 
wb          truncate to zero length or create a binary file for writing
ab          append; open or create binary file for writing at end-of-file
r+          open text file for update (reading and writing) 
w+          truncate to zero length or create a text file for update
a+          append; open or create text file for update
r+b or rb+  open binary file for update (reading and writing)
w+b or wb+  truncate to zero length or create a binary file for update
a+b or ab+  append; open or create binary file for update

Otras funciones

  • int fflush(FILE *stream); : La salida estándar no envía hasta que se acaba el buffer, la ejecución, o se indica con fflush. Esto evita accesos innecesarios al sistema operativo para escribir.

Modificar el indicador de posición del fichero

Los ficheros tienen asociado un indicador de posición que apunta a la posición de lectura o escritura actual. En esa posición se escribirán nuevos datos o se leerán.

Para modificar esto tenemos estas funciones: fgetpos, fseek, fsetpos, ftell, y rewind.


wchar.h

El lenguaje C fue creado en máquinas que usaban caracteres ASCII, es decir, de 7 bits. Pronto esto fue insuficiente, se usaron varias soluciones intermedias hasta que se estableció el estándar UNICODE. Este usa 8 bits para las letras de ASCII y hasta 4 bytes para caracteres especiales.

Sin embargo, los comandos más conocidos de Entrada/Salida todavía usan caracteres de 8 bits. Esto es correcto en la mayoría de los casos. Pero cuando se debe tratar con lenguas no inglesas se necesita poder leer o escribir en UNICODE.

En ANSI-C se consideran wide characters a los del estándar que necesitan más de 1 byte.

Enlaces