#include <stdio.h> #include <stdlib.h> #include <string.h> struct IP { unsigned char* dir; unsigned char* masc; }; int main(int argc, char *argv[]) { FILE *archivo; char caracteres[17]; struct IP ip; unsigned char byte[4],byte1[4]; char* p,*q; int i; archivo = fopen("prueba.txt","r"); if (archivo == NULL) exit(1); //supongo que el archivo tiene dos líneas ip.dir=(unsigned char*)malloc(17); ip.masc=(unsigned char*)malloc(17); fgets(caracteres,17,archivo); strcpy(ip.dir,caracteres); printf("Direccion de IP: %s",ip.dir); fgets(caracteres,17,archivo); strcpy(ip.masc,caracteres); printf("Mascara de subred: %s\n",ip.masc); fclose(archivo); //determino id de red p=strtok(ip.dir,"."); byte[0]=atoi(p); for(i=1;i<4;i++){ p=strtok(NULL,"."); byte[i]=atoi(p); } q=strtok(ip.masc,"."); byte1[0]=atoi(q); printf("El ID de red es: %u.",byte[0]&byte1[0]); for(i=1;i<4;i++){ q=strtok(NULL,"."); byte1[i]=atoi(q); if(i<3) printf("%u.",byte[i]&byte1[i]); else if(i==3) printf("%u\n",byte[i]&byte1[i]); } //debería chequear que le pasé como arg.de línea de comando nombre archivo archivo = fopen (argv[1], "wb"); fwrite (&ip, sizeof (struct IP), 1, archivo); fclose(archivo); return 0; } #include <stdio.h> #include <string.h> #include <stdlib.h> struct lectura{ 1 char* nombre; int dato; char crc; }; int cuentaunos(int x) { int parity=0; while (x != 0) {//supongo valores positivos sino tengo que contar la cantidad de veces que desplazo if(x & 1) parity++; x >>= 1; } return parity; } int main(int argc, char *argv[]) { //debería chequear la cantidad de argumentos FILE *archivo; char caracteres[80]; char encontrado='s',*p; int i,cuentalineaster=0,cuentalinea=0,comienzo,final,cantregistros; struct lectura *vector,*otro; archivo = fopen(argv[1],"r"); //chequear que se abrio bien while (feof(archivo) == 0){ fgets(caracteres,80,archivo); cuentalinea++; if(caracteres[0]=='*'){ i=1; while(caracteres[i]){ if(caracteres[i]!='*'&& caracteres[i]!='\n') { encontrado='n'; break; } i++; } if(encontrado=='s'){ cuentalineaster++;//supongo que los datos de los sensores no tienen asteriscos if(cuentalineaster==1) comienzo=cuentalinea+1; else if(cuentalineaster==2) final=cuentalinea-1; }//fin if encontrado }//fin del if busca *** if(cuentalineaster==2){ cantregistros=(final-comienzo+1)/3; break; } }//fin lectura archivo fclose(archivo); vector=(struct lectura*)malloc(cantregistros*sizeof(struct lectura)); //chequear que no devuelva null 2 archivo = fopen(argv[1],"r"); for(i=1;i<comienzo;i++)//descarto estas líneas fgets(caracteres,80,archivo); for(i=0;i<cantregistros;i++){ fgets(caracteres,80,archivo); //descarto el salto de línea fgets lo retiene p=(char*)malloc(strlen(caracteres)); vector[i].nombre=(char*)malloc(strlen(caracteres)); p=strtok(caracteres,"\n"); strcpy(vector[i].nombre,p); fgets(caracteres,80,archivo); vector[i].dato=atoi(caracteres); fgets(caracteres,80,archivo);//linea en blanco, también debo leerla vector[i].crc=cuentaunos(vector[i].dato); printf("%s\n",vector[i].nombre); printf("%d\n",vector[i].dato); p=(char*)malloc (33); printf("%s\n",itoa(vector[i].dato,p,2)); printf("%d\n",vector[i].crc); } //debo leer el nombre del archivo y si tiene extensión debo cambiarla por .bin p=(char*)malloc(256); p=strtok(argv[1],"."); archivo = fopen(p,"wb+"); fwrite (vector, sizeof (struct lectura), cantregistros, archivo); otro=(struct lectura*)malloc(cantregistros*sizeof(struct lectura));//para ver que lo lee de los datos cargados del archivo //permite cambiar el modo de escritura a lectura sin cerrar la conexión con el archivo rewind(archivo); fread (otro, sizeof (struct lectura), cantregistros, archivo); fclose(archivo); for(i=0;i<cantregistros;i++){ printf("%s\n",otro[i].nombre); printf("%d\n",otro[i].dato); printf("%d\n",otro[i].crc); } getchar(); return 0; } 3