Aufgabe8: filedescriptoren und getc/putc

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe8: filedescriptoren und getc/putc
hi freunde der nacht,

wir kriegen ja ueber die funktion jbuffer filedeskriptoren fuer das ein- und ausgabefile. weiter steht in der angabe wir sollen am besten getc/putc verwenden. diese funktionen wollen aber FILE * haben, und umwandeln mit fileno geht nur in die FILE * → int richtung. ich hab das mal schnell ueberlesen und eine andere funktion verwendet.
aber interessieren tuts mich schon, ob das irgendwie klappt (casten? (FILE *)int )?

mfg, hnzi


In einer früheren Übung zu printdir, wurde uns gezeigt, dass man mit fdopen(3) Filedeskriptoren in FILE Streams umwandeln kann. Der Sinn, dass man getc/putc verwenden soll, liegt mit Sicherheit darin, dass wir ein Modul entwickeln, das nach Möglichkeit Betriebssystemunabhängig sein sollte. Würden wir direkt mit read/write arbeiten, könnte man unser jbuffer Modul nur unter Linux anwenden. So aber greifen wir auf Funktionen der Bibliothek (also Ebene 3) zu.

Tipp: Ich hab speziell bei dieser Aufgabe wieder mal gemerkt, wie wichtig es doch immer ist fflush() zu verwenden, wenn man mit Streams arbeitet. Sonst steht in der output-Datei nichts drin :finger:


hi,

so habs ichs schlussendlich auch gemacht, nur find ich bloed, dass man in fdopen den mode mitgeben muss. wenn ich ein fertiges modul kriege, und eine funktion schreiben muss mit filedescriptoren muss ich erst mal raten, welchen mode deskriptoren haben :-/!

mfg, hnzi


Nicht wircklich, da du davon ausgehen kannst, dass die Datei aus der du lesen sollst auch zum Lesen geöffnet wurde. Ob Sie auch zum Schreiben geöffnet ist, dürfte fdopen nicht interessieren. D.h. wenn du fdopen(fd1, “r”) machst, so kann die Datei mit O_RDONLY oder mit O_RDWR geöffnet sein. Genauso weißt du beim zweiten Deskriptor, dass die Datei mindestens mit schreibrechten geöffnet wurde, also fdopen(fd2, “w”) klappt in jedem Fall.

Von raten kann also keine Rede sein.


Raten muss man gar nix, man schaut einfach nach:

http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html

Aqua