Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/01/2009, 14:41
sr_x
 
Fecha de Ingreso: abril-2008
Mensajes: 18
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Recorrer una estructura sin conocer sus campos

Hola, yo tengo un problema similar,
trato de leer un archivo sin saber que estructura ocuparon para guardar los datos, una solucion a medias que encontre, es crear una estructuctura con todos los tipos de datos, he ir leyendo dato por dato, solo que tu tienes que indicar cual es el que es valido, entonces el cursor de coloca en el siguiente dato, ek problema que tengo es que no se como leer cadenas de caracteres:
Bueno les dejo el codigo que hice y si alguien lo puede mejorar se los agradecere.
Utiliza las llamadas al sistema de Linux:

************************************************** *******
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>

main(){

union un{
int dai;
float daf;
long long dal;
double dad;
char dac;
}uni;

int i=0;
int fd = open( "archivo" , O_RDONLY , 777);

printf("****************************************** *************\n");
printf( " Tamaño de la Union %d \n " , sizeof(uni) );

while(read(fd , &uni , sizeof(uni)) > 0 ){

printf(" 1.- int\t %d\n" , uni.dai);
printf(" 2.- float\t %f\n" , uni.daf);
printf(" 3.- long long\t %lld \n" , uni.dal);
printf(" 4.- double\t %lf\n" , uni.dad);
printf(" 5.- char\t %s" , uni.dac);

printf("\n\nDato aceptado : ");
scanf("%d" , &i );

switch(i){
case 1:lseek(fd , ( sizeof(int) - sizeof(uni) ) , SEEK_CUR);
break;
case 2:lseek(fd , (sizeof(float) -sizeof(uni)) , SEEK_CUR);
break;
case 3:lseek(fd, (sizeof(long long) - sizeof(uni)) , SEEK_CUR);
break;
case 4:lseek(fd, (sizeof(double)-sizeof(uni)),SEEK_CUR);
break;
case 5:lseek(fd, (sizeof(uni.dac)-sizeof(uni)) ,SEEK_CUR);
break;
}
}
}
************************************************** *******

Espero que les sirva y tambien me puedan ayudar
(solo cambia el nombre del archivo por "archivo")