/* 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 */