PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C *fp duplizieren?



403
22-06-2007, 14:56
Hallo :D

Ich habe einen Pointer *fz, mit dem ich in eine Datei schreibe. Und einen Pointer *fp der auf stdout schreibt. Nun moechte ich einfach *fp duplizieren, dass die Sachen sowohl nach stdout als auch in
die Datei geschrieben werden. Macht man das mit freopen oder mit dup, oder beides Holzweg?

Gruss
403

peschmae
22-06-2007, 18:18
dup ist wenn du zwei Filedeskriptoren willst, die beide auf dieselbe Datei zeigen, aber halt verschiedene Nummern haben -> Holzweg 0.1

freopen benutzt du wenn du einen Filedescriptor, der einer bestimmten Datei zugeordnet ist, einer anderen zuornden willst -> Holzweg 0.2

Ich glaube nicht dass es das was du willst schon fertig und einfach gibt. Die einfachste Variante ist wohl einfach passende wrapper-Funktion(en) zu schreiben die dann jeweils in beide Filedescriptoren nacheinander dieselben Daten schreiben.

Klar kannst du da irgendwelche Kunststücke mit fifos oder so machen, aber die beinhalten zumindest bei mir immer das Programm "tee" - also einen externen Prozess (was mich nicht stört weil ich selber so zeugs nur in Bash-Scripts verwende...)

Ich bin allerdings bei weitem kein Unix I/O Guru oder so ;)

MfG Peschmä

awehrm
22-06-2007, 19:43
ich glaube ich verstehe das nicht ganz, aber warum machst du denn nicht einfach eine ganz normale ausgabe und schreibst danach in die datei?
ich glaube dass was du vorhast kann sowieso nicht funktionieren.
mal weg von den file-pointern (stecken eh deskriptoren hinter), du hast also zwei Filedeskriptoren, einen der mit der Standardausgabe verbunden ist und einen weiteren der auf eine Datei zeigt.
Wenn du einen Deskriptor duplizierst hast du ja ein und dieselbe Ressource (z.B. Datei) auf mehreren Deskriptoren, wobei du beachten musst, dass die sich dann den Eintrag in der Filestatus-Tabelle teilen.
So wie ich das verstehe, möchtest du einen Deskriptor, mit dem du gleichzeitig auf die Standardausgabe und in eine Datei schreibst.
Das geht so nicht.
Du könntest höchstens die Standardausgabe auf eine Datei legen, aber dann siehst du ja nichts mehr auf dem Bildschirm.
Also wie gesagt, ich würd einfach normal ausgeben und dann in die Datei schreiben.

mfg

403
22-06-2007, 20:44
Erstmal Danke fuer die schnellen Antworten!

Man koennte ggf auch versuchen ein tail -f auf die logdatei nachzubauen. Eine saubere Loesung haette ich allerdings bevorzugt, und dann am besten auch noch mit attach und reattach innerhalb bestimmter logstatements. Ich werde jetzt wohl erstmal mit tee und Kaffee experimentieren :)