UNIDAD 6: REGISTROS Y ARCHIVOS DIRECTOS
TEMA LINUX GCC 3: GRABACION Y LECTURA DISCO
Como ya se menciono grabar y lectura de registros o estructuras a renglones o registros de archivos en disco.
Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.
GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCO
Prog29.html
<HTML> <FORM ACTION="http://192.168.1.251/~tusitio/cgi-bin/prog29.cgi" METHOD=post> CLAVE:<INPUT TYPE=text NAME=CLAVE><BR> NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR> EDAD:<INPUT TYPE=TEXT NAME=EDAD><BR> <INPUT TYPE=submit VALUE=OK> </FORM></HTML>
corrida:
prog29.cpp
#include <string>
#include <iostream>
#include <lcnet.h>
using namespace std;
static struct {
int clave;
char nombre[30];
int edad;
} animalito;
int main() {
//cargando estructura
animalito.clave=getinteger("CLAVE");
// y se debe almacenar la string como un arreglo de chars de ahí la
// necesidad de un temporal
string temp =getstring("NOMBRE");
strcpy( animalito.nombre, temp.c_str() );
animalito.edad=getinteger("EDAD");
//abriendo, grabando, cerrando
FILE *archdisco;
archdisco = fopen("//home//tusitio//animalito.dat","at+");
fwrite(&animalito,sizeof(animalito),1,archdisco);
fclose(archdisco);
//avisando usuario
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
cout << animalito.clave <<" "<<animalito.nombre<<" "<<animalito.edad<<endl;
cout << "<br>" << "registro grabado" <<endl;
cout << "</html>" << endl;
}
Observar que es completamente similar ap programa de archivos secuenciales, solo se recomienda que las claves sigan la secuencia 0,1,2,3,4,5…..
La primera observación es que se esta usando el “fopen()” en modo “at+” en lugar de modo “w” pero es para matar dos pajaros de un tiro, reestudiar la clase de modos de apertura.
La instrución de grabación es:
fwrite(&animalito,sizeof(animalito),1,archdisco);
que ya se estudio anteriormente.
LECTURA CONSULTA DESPLIEGUE DE REGISTROS
Prog30.html
<HTML> <FORM ACTION="http://192.168.1.251/~tusitio/cgi-bin/prog30.cgi" METHOD=post> <INPUT TYPE=submit VALUE=LEER> </FORM></HTML>
corrida:
prog30.CPP
#include <string>
#include <iostream>
#include <lcnet.h>
using namespace std;
static struct {
int clave;
char nombre[30];
int edad;
} animalito;
int main()
{
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
//abriendo, leyendo,cargando estructura
FILE *archdisco;
archdisco = fopen("//home//tusitio//animalito.dat","r+");
// aqui siempre debe empezar el ciclo de lectura
// y fread() regresa siempre cuantas estructuras leyo
while(fread(&animalito,sizeof(animalito),1,archdisco)==1)
{ // desplegando estructuras
cout << animalito.clave <<" "<<animalito.nombre<<" "<<animalito.edad<<endl;
cout << "<br>" <<endl;
}; // aqui termina while
// no olvidar cerrar archivo y siempre fuera de while
// tampoco olvidar cerrar la pagina
fclose(archdisco);
cout << "</html>" << endl;
return 0;
}
Seria bueno que el despliegue fuese en una tabla html pero esto queda de tarea.
TAREAS PROGRAMACION LINUX GCC PROGRAMACION LINUX GCC
1.- Cargar y Leer los archivos pedidos en el TEMA LINUX GCC anterior.