Как я могу использовать freopen() для перенаправления stdout и stdin в файл журнала тисков в многопоточном приложении?

Расширенный вопрос из многопоточного приложения, как я могу перенаправить stderr & stdout в отдельный файл в соответствии с потоком?

Посмотрите, как я хочу сохранить все printf и сообщения об ошибках / предупреждениях, созданные в каждом потоке, в разных лог-файлах.

FILE * freopen ( const char * filename, const char * mode, FILE * stream ); 

Функция freopen перенаправляет поток 3-го аргумента в имя файла 1-го аргумента. Итак, теперь я хочу спросить вас в многоадресном приложении, могу ли я сделать это с помощью freopen()... как?

1 ответ

Решение

Поскольку все ресурсы совместно используются в многопоточном приложении, включая файлы, изменение stdin или же stdout в одном потоке меняется их для всех потоков. Если вы хотите изменить его в одном потоке, используйте fork вместо этого создать новый процесс.

Другие вопросы по тегам