/* (c) kreator Program za posluzivanje dinamicke strukture red na disku */ #include #include #define MAX_ELEM 10 #define IME_REDA "red.dat" #define IME_ULAZA "input.txt" typedef int tip_p; int dodaj_u_red(tip_p element,FILE *red,int n,int izlaz,int *ulaz) { if (((*ulaz+1)%n)==izlaz) return 0; (*ulaz)++; *ulaz%=n; fseek(red,*ulaz*sizeof(tip_p),SEEK_SET); fwrite(&element,sizeof(tip_p),1,red); printf("na mjesto %d upisujem %d\n",*ulaz,element); return 1; } int brisi_iz_reda(tip_p *element,FILE *red,int n,int *izlaz,int ulaz) { if (ulaz==*izlaz) { printf("red je prazan!\n"); return 0; } (*izlaz)++; *izlaz%=n; fseek(red,*izlaz*sizeof(tip_p),SEEK_SET); fread(element,sizeof(tip_p),1,red); printf("s mjesta %d brisem element %d\n",*izlaz,*element); return 1; } void fatal(char *msg) { puts(msg); exit(EXIT_FAILURE); } int main(void) { FILE *red, *input; tip_p element; int ulaz=0,izlaz=0; if ((red=fopen(IME_REDA,"w+b"))==NULL) fatal("ne mogu citati/pisati izlaz"); if ((input=fopen(IME_ULAZA, "rt"))==NULL) fatal("ne mogu citati ulaz"); while(fscanf(input,"%d",&element)!=EOF) if (!dodaj_u_red(element,red,MAX_ELEM,izlaz,&ulaz)) { printf("nema vise mjesta u redu, ulaz je %d\n", ulaz); break; } fclose(input); while(brisi_iz_reda(&element,red,MAX_ELEM,&izlaz,ulaz)); fclose(red); return(EXIT_SUCCESS); }