Praktikum Programmiersprache C - Binärdateien


Daten können in unterschiedlichster Form in Dateien gespeichert werden. Eine sehr einfache Form ist, die Daten, wie sie in Strukturen im Speicher stehen, direkt in eine Datei zu schreiben. Dies ist unter Aspekten der Portabilität sehr unkomfortabel. Auch dürfen die Strukturen in diesem Fall keine Pointer enthalten, da diese Adressen für die Speicherung wertlos sind. In der Regel wird man zwischen einer internen und einer externen Datenrepräsentation unterscheiden. Dennoch soll sich dieses Praktikum solchen Binärdateien widmen, deren gleichlange Datensätze Strukturinhalte der Struktur tArt (Materialartikel) enthalten.
Im Downloadbereich stehen die Dateien mat.dat bzw. mat.dat.intel zum Download zur Verfügung. Es sind Binärdateien, die Strukturen, wie sie in mat.h beschrieben sind, enthalten. Auf intelbasierten PCs und kompatiblen ist mat.dat.intel, bzw. die 64-bit-Version zu wählen, auf IBM-workstation, wie iaix? ist mat.dat zu nutzen. Beide Dateien enthalten die selben Daten, aber in plattformabhänger Form, deshalb die Unterscheidung.
Kontrollfrage: worin unterscheiden sich die einzelnen Dateien?

Schreiben Sie ein C-Programm, das die Datei  mat.dat  als Binärfile einliest, die Artikel sortiert und als Inventurliste mit folgendem Zeilenaufbau ausgibt. Der Speicherplatz, in dem die Artikel abgelegt werden, soll mit malloc auf dem heap ausgefasst werden. Überprüfen Sie den Erfolg der Operation.
Art.-Nr      Bezeichnung              Stueckzahl   Soll   Unterschrift
nnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnnnnn nnnnnnnnn ......... ...............
Der Aufbau der Datensätze ist aus dem Headerfile mat.h, das Sie mit #include"mat.h" in Ihr Programm einbinden können, ersichtlich. Die Dateien mat.dat und mat.h befinden sich unter
mat.h, mat.dat, mat.dat.intel, mat.dat.intel64
Der Name der Materialdatei soll als Kommandozeilenparameter an das Programm übergeben werden. Überprüfen Sie an Hand von argc, ob die Parameter korrekt eingegeben wurden.
Die Ermittlung der Länge der Datei ist mit der Befehlsfolge

   fseek(pFile,0,SEEK_END);
len=ftell(pFile);
fseek(pFile,0,SEEK_SET);
möglich.

Zum Einlesen einer gegebenen Anzahl von Bytes verwendet man die Funktion fread.

Zusatzaufgaben:
- Richten Sie einen Vektor von Pointern ein und sortieren Sie die Pointer.
- Geben Sie über einen Kommandozeilenparameter an, ob nach Bezeichnung oder nach Artikelnummer sortiert werden soll.


A. Beck