Как я могу использовать freopen() для перенаправления stdout и stdin в файл журнала тисков в многопоточном приложении?
Расширенный вопрос из многопоточного приложения, как я могу перенаправить stderr & stdout в отдельный файл в соответствии с потоком?
Посмотрите, как я хочу сохранить все printf и сообщения об ошибках / предупреждениях, созданные в каждом потоке, в разных лог-файлах.
FILE * freopen ( const char * filename, const char * mode, FILE * stream );
Функция freopen перенаправляет поток 3-го аргумента в имя файла 1-го аргумента. Итак, теперь я хочу спросить вас в многоадресном приложении, могу ли я сделать это с помощью freopen()... как?
1 ответ
Решение
Поскольку все ресурсы совместно используются в многопоточном приложении, включая файлы, изменение stdin
или же stdout
в одном потоке меняется их для всех потоков. Если вы хотите изменить его в одном потоке, используйте fork
вместо этого создать новый процесс.