Как я могу направить "cout", "cerr", "stdout" и "stderr" в один файл из программы на C ++ - PullRequest
0 голосов
/ 17 мая 2018

У нас есть веб-служба C ++, которая порождает дочерний процесс при каждом запросе.Итак, каждый ребенок создает свой собственный файл журнала.Мы связываем поток cout и cerr с файлом, чтобы захватить все «std :: cout» и «std :: cerr».

Однако служба использует другой компонент «C» для выполнения некоторых устаревших действий.Компонент C использует «fprintf (stdout, xxx)» и «fprintf (stderr, xxx)» для печати журналов.

Эти сообщения не печатаются в файлах журналов «cout» и «cerr».Вместо этого он печатается в подсказке.Нам нужно, чтобы эти сообщения stdout / stderr также отправлялись в соответствующий файл дочернего журнала.

Есть ли способ связать «stdout» и «stderr» также с тем же файлом, где «cout» и «cerr»гранично.

Есть похожие вопросы, но в них нет смешанного кода с несколькими языками.

Дайте мне знать.

Спасибо

1 Ответ

0 голосов
/ 17 мая 2018

По умолчанию std::cin / std::cout / std::cerr / std::clog привязаны к stdin, stdout и stderr соответственно.Правильнее всего перенаправить слой C, а слой C ++ позаботится о себе.

Если вы работаете в системе POSIX, просто используйте системный вызов dup2(), чтобы перенаправить 0 в fd (* 1011).*), 1 (stdout) и 2 (stderr) для файлов по вашему выбору.

...