Ich arbeite mit einem Multi-Thread-Programm.C wiederherstellen stdout zu Terminal
Zuerst leite ich meine stdout auf eine bestimmte Datei um. Kein Problem dort (ich benutzte dup2(fd, 1)
wo fd
der Dateideskriptor für die Datei ist).
Danach muss ich meine stdout wieder an das Terminal umleiten.
Mein erster Ansatz:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
Es sagt illegal suchen.
Keine Ahnung, warum das passiert.
Aber wenn ich das zur Arbeit bekomme, dann brauche ich nur fsetpos(stdout, &stream_stdout)
und es sollte funktionieren.
Meine zweite Idee war es, die stdout mit dup2(stdout, 4)
in die Datei-Deskriptor-Tabelle, an der Position 4 zu kopieren. Aber das funktioniert auch nicht.
Wie kann ich die Standardausgabe auf ihren ursprünglichen Zielort (Terminal, Rohr, Datei, was auch immer) zurückschalten?
Ich habe das Gefühl, dass es so eine schlechte Idee ist, 'stdout' herum zu bewegen - welche Position sollte das _terminal_ in' fgetpos() 'genau angeben? Warum nicht einfach eine Datei öffnen und mit 'fwrite()' oder 'fprintf()' oder 'write()' ausgeben und bei Bedarf über '/ dev/tty' an das Terminal ausgeben? – sarnold
@sarnold: wahrscheinlich, weil das Programm Bibliotheken oder anderen unveränderbaren Code hat, die auf 'stdout' fest verdrahtet sind. – wallyk
@sarnold Ich habe tatsächlich nicht gedacht, dass diese Möglichkeit. Lass mich schnell nachsehen. – Alessandroempire