UNIDAD 6: REGISTROS Y ARCHIVOS DIRECTOS
TEMA LINUX GCC 4: BUSQUEDA
En este TEMA LINUX GCC se analiza la busqueda de un registro o renglón determinado.
En este proceso el usuario del programa quiere que se despliegue un y solo un registro de información proporcionando un dato de busqueda generalmente la clave del registro.
Recordar que en esta operación se muestra la diferencia fundamental entre archivos secuenciales y archivos directos, es decir aqui se puede accesar directamente un registro n cualesquiera.
Prog31.html
<HTML> <FORM ACTION="http://192.168.1.251/~tusitio/cgi-bin/prog31.cgi" METHOD=post> CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit VALUE=BUSCAR> </FORM></HTML>
corrida:
prog31.cpp
#include <string>
#include <iostream>
#include <lcnet.h>
using namespace std;
static struct {
int clave;
char nombre[30];
int edad;
} animalito;
int main() {
// cargando clave a buscar
int clave=getinteger("CLAVE");
cout << "Content-type: text/html\n\n";
cout << "<html>" << endl;
//abriendo, leyendo,cargando estructura
FILE *archdisco;
archdisco = fopen("//home//tusitio//animalito.dat","r+");
// usar fseek() para posicionarse al principio de registro buscado
fseek (archdisco, (long)(clave)* sizeof(animalito), 0 );
// ahora se lee el registro
fread(&animalito,sizeof(animalito),1,archdisco);
// desplegando estructura
if ( clave == animalito.clave)
cout << animalito.clave <<" "<<animalito.nombre<<" "<<animalito.edad<<endl;
// no olvidar cerrar archivo y pagina
fclose(archdisco);
cout << "</html>" << endl;
return 0;
}
corrida:
Como se desprende del programa usando fseek() es posible posicionarse en cualquier byte del archivo.
El formato completo de fseek() es:
fseek(apuntador,(long)(clave)*(sizeof(registro)),0);
donde los parametros son:
Como va a estar dificil que se le atine a un byte determinado, es por eso que en el programa mejor se deja que sea el propio servidor quien calcule el byte donde empieza un registro determinado con clave * sizeof o tamaño de registro.
0 —> SEEK_SET principio del archivo.
1 —> SEEK_CUR posicion actual.
2 —> SEEK_END fin del archivo.
PROBLEMAS PROPUESTOS
Construirles programas de busquedas a los archivos ya construidos.