Sto lavorando con un programma multi-thread.C stdout ripristino al terminale
Per prima cosa reindirizzare il mio stdout su un determinato file. Nessun problema lì (ho usato dup2(fd, 1)
dove fd
è il descrittore di file per il file).
Successivamente, ho bisogno di reindirizzare nuovamente il mio stdout al terminale.
Il mio primo approccio:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
Dice illegale cercano.
Non ho idea di cosa stia succedendo.
Ma se riesco a farlo funzionare, allora ho solo bisogno di usare fsetpos(stdout, &stream_stdout)
e dovrebbe funzionare.
La mia seconda idea, era quella di copiare lo stdout utilizzando dup2(stdout, 4)
nella tabella dei descrittori di file, nella posizione 4. Ma anche questo non funziona.
Come posso riportare l'uscita standard alla destinazione originale (terminale, pipe, file, qualsiasi cosa)?
Ho la sensazione che provare a spostare 'stdout' in questo modo è probabilmente una cattiva idea - quale posizione dovrebbe esattamente il rapporto _terminal_ in' fgetpos() '? Perché non aprire semplicemente un file e inviarlo ad esso usando 'fwrite()' o 'fprintf()' o 'write()' e lo output al terminale tramite '/ dev/tty' quando ne hai bisogno? – sarnold
@sarnold: probabilmente perché il programma ha librerie o altro codice inalterabile che sono cablati a 'stdout'. – wallyk
@sarnold in realtà non l'ho pensato a quella posibilità. Fammi controllare velocemente. – Alessandroempire