Mega Code Archive

 
Categories / C / Structure
 

Write structure into file

/* C & Data Structures Published in Feb 2004 by CHARLES RIVER MEDIA Author: P. S. Deshpande, O. G. Kakde SKU: 1584503386 ISBN: 1584503386 */     #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 50 typedef struct {     char  name[10];     int key; } file_record; /* this function adds the relatiuve addres to the index for a key */ void create_index(long index[], int key, long rel_add ) {     index[key] = rel_add; } /* this function writes a record to the file */ void write_rec(FILE *fp, file_record rec) {    fwrite(&rec,sizeof(rec),1,fp); } void main() {     long rel_add;     int key;     file_record frec;     long index[MAX];/* an index list*/     int n,i;     FILE *recfile=NULL,*ifile=NULL;     /* this initializes the index list to all ? */     for(i=0; i< MAX; i++)         index[i]= (-1);     recfile=fopen("mfile","w");     if(recfile == NULL) {         printf("Error in openeing file mfile\n");         exit(0);     }     rel_add = 0 ;     do {         printf(" Enter the data vlue and the key of the record to be added to file mfile\n");         scanf("%s %d",frec.name,&frec.key);         while(index[frec.key] != (-1)) {             printf(" A record with this key value already exist in a file enter record key value\n");             scanf("%s %d",frec.name,&frec.key);         }         create_index(index,frec.key,rel_add);          write_rec(recfile,frec);         rel_add =  ftell(recfile);          /* this sets the relative address for the next record to be        the value of current file position pointer in bytes from        the beginning of the file */          printf("Enter 1 to continue adding records to the file\n");          scanf("%d",&n);     }while(n == 1);         ifile=fopen("index_file","w");               if(ifile == NULL) {        printf("Error in openeing file index_file\n");          exit(0);     }          fwrite(index,sizeof(index),1,ifile);/*writes the complete index into the index_file */     fclose(recfile);     fclose(ifile);     printf("Enter 1 if you want to retrieve a record\n");     scanf("%d",&n);          if( n == 1) {        ifile=fopen("index_file","r");        if(ifile == NULL) {            printf("Error in openeing file index_file\n");            exit(0);        }        fread(index,sizeof(index),1,ifile);                /* reads the complete index into the index list from the index_file*/        fclose(ifile);        recfile=fopen("mfile","r");                if(recfile == NULL) {            printf("Error in openeing file mfile\n");            exit(0);        }     }     printf("THE CONTENTS OF FILE IS \n");          while( (fread(&frec,sizeof(frec),1,recfile)) != 0)          printf("%s %d\n",frec.name,frec.key);          do {         printf("Enter the key of the record to be retrieved\n");         scanf("%d",&key);         rel_add = index[key]; /*gets the relative address of the record from index list */         if( (fseek(recfile,rel_add,SEEK_SET))!= 0) {              printf("Error\n");              exit(0);         }         fread(&frec,sizeof(frec),1,recfile);         printf("The data value of the retrieved record is %s\n",frec.name);         printf("Enter 1 if you want to retrieve a record\n");         scanf("%d",&n);     } while(n == 1);          fclose(recfile); }