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:

image97.jpg

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;
}

image98.jpg

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:

image70.jpg

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;
}

image99.jpg

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.

Politica de Privacidad