Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Omar Andrs Zapata Mesa Grupo de Fenomenologa de Interacciones Fundamentales, (Gfif) Universidad de Antioquia
refiere a las operaciones que ocurren en el teclado y la pantalla de la computadora. Para ello usamos una serie de funciones definidas en el ANSI, tales como
Para
ver mas informacin funciones ver man stdio.h Veamos el siguiente ejemplo:
sobre
estas
Ejemplo
#include<stdio.h> int main(int argc,char *argv[]){ char c; do{ c=getchar(); if(islower(c))putchar(toupper(c)); else putchar(tolower(c)); }while(c!='.'); } #include<stdio.h> int main(int argc,char *argv[]){ char str[80]; gets(str); printf("La longitud es %d\n",strlen(str)); }
entrada y salida con formato es para indicar que se imprimirn o se leern no solo caracteres sino otros tipos de datos como enteros, tipos punto flotante, octal, hexadecimal, notacin cientfica etc.. Para esto se usa dos funciones bsicamente que son printf y scanf, para el cual, se usa una cadena de control que indica el formato a usar y luego los argumentos o variables a leer o imprimir. Ver Clases anteriores.
Manejo de Archivos
Existen
dos clases de tipos de archivos principalmente, los bufereados y no bufereados. Los bufereados son aquellos que se montan en ram cuando se montan, los no bufereados son los que permanecen en disco. En el estndar ANSI todos los archivos son buffereados pero en UNIX no todos lo son, por ejemplo el modo de letura texto es buffereado pero lectura en modo binario no.
Manejo de Archivos
Para abrir un archivo desde el codigo en C se usa un puntero al tipo de dato FILE, que contiene informacin o como el nombre del archivo, el modo de apertura y el indicador de posicin.
FILE *pf; pf=fopen("nombre_archivo","modo_apertura");
Los modos de apertura son r read, w write, a append, rb read binary, wb write bianry, ab append binary y combinaciones como rw lectoescritura, rwb lectoescritura binaria.
Manejo de Archivos
putc y y getc son funciones para leer y escribir caracteres en un archivo. Ahora suponga que esta leyendo un archivo y necesita saber cundo lleg al final de la informacin contenida en el, para esto se defini EOF en stdio.h, que nos idica que no hay mas datos a leer. Es necesario despus de manipular el archivo en lectura o escritura cerrar el idicador o puntero a file para liberar la informacin o flushearla en disco, para ello se usa fclose.
Manejo de Archivos
Hacerle
flush a un archivo es hacer que la informaci'on del archivo que se encuentra en ram baje inmediatamente a disco, para esto usamos la funcin fflush. Cuando estamos en el final del archivo y queremos volver al principio usamos rewind. Ahora veamos un ejemplo con todas estas funciones:
Manejo de Archivos
Para
manipular datos de archivos binarios podemos usar fwrite y para leerlos fread; estas funciones tambin estn diseadas para guardar de forma binaria tipos de datos complejos como estructuras, esto se conoce en el mundo de la programacin como la serializacin de datos. Ver ms man fread fwrite. Para manipular el apuntador de posicion del archivo en cualquier posicin se usan las funciones fseek, ftell.
Ejemplo
#include<stdio.h> FILE *ptrArchivo[2]; int main(int argc,char *argv[]){ if(argc == 3){ ptrArchivo[0]=fopen(argv[1],"r"); ptrArchivo[1]=fopen(argv[2],"w"); char ch=' '; while(!ferror(ptrArchivo[0])){ ch=getc(ptrArchivo[0]); if(ch==EOF) break; putc(ch,ptrArchivo[1]); } fclose(ptrArchivo[0]); fclose(ptrArchivo[1]); }else printf("./cp input output\n"); }
archivos binarios son aquellos que se guardan en cdigo solo entendible para la maquina, pero uno puede ver el contenido usando por ejemplo okteta. Ej:
#include<stdio.h> FILE *ptrArchivo; int main(int argc,char *argv[]){ ptrArchivo=fopen(argv[1],"wb"); int dato=10; fwrite(&dato,sizeof(int),1,ptrArchivo); fclose(ptrArchivo); }
Ejemplo 3 fflush
#include<stdio.h> FILE *ptrArchivo; int main(int argc,char *argv[]){ ptrArchivo=fopen("flush.txt","w"); int i=0; for(i=0;i<1000000;i++){ printf("%d\n",i); fprintf(ptrArchivo,"%d\n",i); // fflush(ptrArchivo); } fclose(ptrArchivo); }
Para este ejercicio vamos a parar el programa con crt+c y mirar lo ltimo que imprimi en pantalla y lo que guard en el archivo usando y sin usar fflush. Tambin el tiempo de ejecucin sin usar fflush y usandolo.
dos funciones se crearon para leer/escribir datos fcilmente en archivos. Se usan similar a scanf y printf, solo que el primer algumento es el puntero del archivo donde se va a leer/escribir los datos.
lee una lnea entera, almacenando la direccin del buffer que contiene el texto. sscanf lee su entrada de la cadena de caracteres. Estas dos funciones se pueden usar en conjunto para procesar una lnea de datos tomada de un archivo, por lo regular se toma la lnea se hace una copia o se preprocesa, luego con sscanf se toman los datos al estilo fscanf, solo que el primer argumento no es un puntero a FILE sino una cadena de caracteres.
Ejercicios
Hacer
un programa que dado un par de caracteres por la lnea de commandos que remplaze todo el archivo, el primero por el segundo al estilo sed. Hacer un programa que dado un archivo por la lnea de comandos que retorne la columna pedida. Hacer un programa que mire qu lneas empiezan por # y borre toda la linea.
Referencias