Я работаю с многопоточной программой.C восстановление stdout на терминал
Сначала я перенаправляю свой stdout в определенный файл. Там нет проблем (я использовал dup2(fd, 1)
, где fd
является файловым дескриптором для файла).
После этого мне нужно снова перенаправить мой вывод на терминал.
Мой первый подход:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
Это говорит незаконным искать.
Не знаю, почему это происходит.
Но если я получу это для работы, тогда мне нужно использовать только fsetpos(stdout, &stream_stdout)
, и он должен работать.
Моя вторая идея состояла в том, чтобы скопировать stdout с помощью dup2(stdout, 4)
в таблицу дескриптора файла в позиции 4. Но это тоже не работает.
Как переключить стандартный вывод обратно в исходное место назначения (терминал, труба, файл, что угодно)?
У меня такое чувство, что попытка переместить 'stdout' вокруг, как это, вероятно, плохая идея. Какую позицию должен представлять отчет _terminal_ в' fgetpos() '? Почему бы просто не открыть файл и не вывести его с помощью 'fwrite()' или 'fprintf()' или 'write()' и вывести на терминал через '/ dev/tty', когда вам это нужно? – sarnold
@sarnold: возможно, потому, что у программы есть библиотеки или другой неизменный код, который жестко связан с 'stdout'. – wallyk
@sarnold я на самом деле не думал, что эта возможность. Позвольте мне быстро проверить. – Alessandroempire