/***************************************************************/ /* Prof. Dr. Carsten Vogt */ /* FH Koeln, Fak. 07 / Nachrichtentechnik */ /* http://www.nt.fh-koeln.de/vogt */ /* */ /* Beispielprogramm p07030600.c */ /* aus "C fuer Java-Programmierer", Hanser-Verlag */ /* */ /* Demonstriert wird der wahlfreie Zugriffe auf eine Binaer- */ /* datei. */ /***************************************************************/ #include int main(void) { int i, size; FILE *fp; struct angestellten_info { char name[41]; int personalnummer; float gehalt; } a; /* size = Größe einer Struktur */ size = sizeof(struct angestellten_info); /* Initialisierung der Datei mit 20 Strukturwerten */ fp = fopen("datei","w+b"); for (i=0;i<20;i++) { a.personalnummer = i; a.gehalt = 3500 + i*13; strcpy(a.name,"Mueller"); sprintf(&(a.name[7]),"%2.2d",i); fwrite(&a,size,1,fp); } /* Zurücksetzen zum Dateianfang und Einlesen des ersten Eintrags */ rewind(fp); fread(&a,size,1,fp); /* Setzen auf den Eintrag Nr. 3 (= vierter Eintrag ab Dateianfang) und Einlesen */ fseek(fp,3*size,SEEK_SET); fread(&a,size,1,fp); printf("Eintrag Nr. %d: %d %.2f %s\n\n",(ftell(fp)/size-1),a.personalnummer,a.gehalt,a.name); /* Überspringen von zwei Einträgen und Einlesen des darauf folgenden Eintrags */ fseek(fp,2*size,SEEK_CUR); fread(&a,size,1,fp); printf("Eintrag Nr. %d: %d %.2f %s\n\n",(ftell(fp)/size-1),a.personalnummer,a.gehalt,a.name); /* Zurücksetzen um zwei Einträge und Einlesen */ fseek(fp,-2*size,SEEK_CUR); fread(&a,size,1,fp); printf("Eintrag Nr. %d: %d %.2f %s\n\n",(ftell(fp)/size-1),a.personalnummer,a.gehalt,a.name); /* Setzen auf den letzten Eintrag und Einlesen */ fseek(fp,-size,SEEK_END); fread(&a,size,1,fp); printf("Eintrag Nr. %d: %d %.2f %s\n\n",(ftell(fp)/size-1),a.personalnummer,a.gehalt,a.name); fclose(fp); return 0; }