Pracuję z programem wielowątkowym.C przywróć stdout do terminala
Najpierw przekierowuję moje wyjście do określonego pliku. Nie ma problemu (użyłem dup2(fd, 1)
gdzie fd
jest deskryptorem pliku dla pliku).
Następnie muszę ponownie przekierować moje wyjście do terminalu.
Moje pierwsze podejście:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
Mówi nielegalne poszukiwania.
Nie mam pojęcia, dlaczego tak się dzieje.
Ale jeśli sprawię, że to zadziała, to będę musiał tylko użyć fsetpos(stdout, &stream_stdout)
i powinno działać.
Moim drugim pomysłem było skopiowanie standardowego stdouta przy użyciu dup2(stdout, 4)
do tabeli deskryptorów plików na pozycji 4. Ale to też nie działa.
Jak przełączyć standardowe wyjście z powrotem do pierwotnego miejsca docelowego (terminal, potok, plik, cokolwiek)?
Mam przeczucie, że próba przeniesienia 'stdout' dookoła w ten sposób jest prawdopodobnie złym pomysłem - jaką dokładnie pozycję powinien mieć _terminalny_ raport w' fgetpos() '? Dlaczego po prostu nie otwierać pliku i wyświetlać go przy użyciu 'fwrite()' lub 'fprintf()' lub 'write()' i wyprowadzać do terminala za pomocą '/ dev/tty' kiedy jest to potrzebne? – sarnold
@sarnold: prawdopodobnie dlatego, że program ma biblioteki lub inny niezmienny kod, który jest podłączony do 'stdout'. – wallyk
@sarnold i faktycznie nie dałam mu tego do myślenia. Pozwól mi szybko sprawdzić. – Alessandroempire