C восстановить стандартный вывод на терминал

Я работаю с многопоточной программой.

Сначала я перенаправляю стандартный вывод на определенный файл. Никаких проблем (я использовал dup2(fd, 1), где fd— дескриптор файла).

После этого мне нужно снова перенаправить стандартный вывод на терминал.

Мой первый подход:

      /*Declaration*/
      fpost_t  stream_sdout;
      /*code*/
      if ( fgetpos( stdout, &stream_sdout) == -1 )
          perror(Error:);

Это говорит о незаконном поиске.
Не знаю, почему это происходит.
Но если я заставлю это работать, мне нужно будет использовать только fsetpos(stdout, &stream_stdout), и все должно работать.

Моя вторая идея заключалась в том, чтобы скопировать стандартный вывод с помощью dup2(stdout, 4)в таблицу файловых дескрипторов в позицию 4. Но это тоже не работает.

Как я могу переключить стандартный вывод обратно в исходное место назначения (терминал, канал, файл и т. д.)?

20
задан Alexis Wilke 17 January 2018 в 07:49
поделиться