/* files3.c */

#include <stdio.h>
#include <stdlib.h> /* für EXIT_SUCCESS, EXIT_FAILURE */
#include <string.h>

typedef struct Kunde
{

int kundennr;
char nachname[30];
char vorname[25];

} KUNDE;

int main(void)
{

FILE *fp;

char *filename="/tmp/probe";

KUNDE kunde, kunde2, kunde3;

/* Zur Demonstration: Initialisierung von kunde */

strcpy(kunde.nachname,"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");

strcpy(kunde.vorname, "!!!!!!!!!!!!!!!!!!!!!!!!");

kunde.kundennr=255;

/* Öffnen der Datei filename zum Schreiben, ggf. Anhängen */

fp=fopen(filename,"wb+");

if (fp==NULL)

{

fprintf(stderr,"\nFehler: Datei %s kann nicht "

"geöffnet werden!\n",filename);

return(EXIT_FAILURE);

} /* end if fp==NULL */

/* Schreiben von drei Datensätzen in die Datei filename */

strcpy(kunde.nachname,"Asimov");

strcpy(kunde.vorname,"Isaak");

kunde.kundennr=10;

fwrite(&kunde,sizeof(KUNDE),1,fp);

strcpy(kunde.nachname,"Böll");

strcpy(kunde.vorname,"Heinrich");

kunde.kundennr=11;

fwrite(&kunde,sizeof(KUNDE),1,fp);

strcpy(kunde.nachname,"Canetti");

strcpy(kunde.vorname,"Elias");

kunde.kundennr=12;

fwrite(&kunde,sizeof(KUNDE),1,fp);

/* "Zurückspulen" an den Anfang der Datei */

rewind(fp);

/* äquivalent zu fseek(fp,0,SEEK_SET); */

/* Lesen des ersten Datensatzes */

fread(&kunde2,sizeof(KUNDE),1,fp);

printf("Der erste Datensatz: ");

printf("%4d: %s %s\n",

kunde2.kundennr,kunde2.vorname,kunde2.nachname);

/* Lesen des dritten Datensatzes (ohne Fehlerbehandlung) */

fseek(fp,(3-1)*sizeof(KUNDE),SEEK_SET); /* Auf 3.Position */

fread(&kunde3,sizeof(KUNDE),1,fp);

printf("Der dritte Datensatz: ");

printf("%4d: %s %s\n",kunde3.kundennr,kunde3.vorname,kunde3.nachname);

/* Ändern des zweiten Datensatzes */

fseek(fp,1L*sizeof(KUNDE),SEEK_SET); /* Auf 2.Position */

fread(&kunde,sizeof(KUNDE),1,fp);

strcpy(kunde.nachname,"Blum");

strcpy(kunde.vorname,"Katharina");

fseek(fp,1L*sizeof(KUNDE),SEEK_SET); /* Auf 2.Position */

fwrite(&kunde,sizeof(KUNDE),1,fp);

/* Anhängen eines vierten Datensatzes */

fseek(fp,0,SEEK_END); /* an die letzte Position */

/* fseek(fp,3L*sizeof(KUNDE),SEEK_SET); /* Auf 2.Position */

strcpy(kunde.nachname,"Dürrenmatt");

strcpy(kunde.vorname,"Friedrich");

kunde.kundennr=14;

fwrite(&kunde,sizeof(KUNDE),1,fp);

/* Lesen aller Datensätze der Datei filename */

rewind(fp);

printf("\nDie Datensätze in %s sind nun:\n",filename);

do

{

if (fread(&kunde,sizeof(KUNDE),1,fp)==1)

printf("%4d: %s %s\n",kunde.kundennr,kunde.vorname,kunde.nachname);

} while (!feof(fp));

/* Programm beenden, return code EXIT_SUCCESS */

fclose(fp);

return(EXIT_SUCCESS);

} /* end main */