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

Это довольно легко перенаправить вывод в другое место назначения. Я могу легко достичь этого с помощью:

freopen ("/def/tty0", "w", stdout);
printf ("Redirected");
fclose (stdout);

Но как я мог перенаправить его на два или более файлов? Мне нужна функциональность, аналогичная этой, предоставляемой "тройником".

Есть ли хорошо известный подход?

1 ответ

Решение

Это невозможно сделать напрямую: каждый дескриптор файла назначается ровно одному ресурсу (обычно файлу). Если вы хотите написать в FILE Чтобы получить записи в несколько файлов, вы должны сделать несколько трюков. Вот несколько идей:

  • Используйте функцию только для GNU fopencookie(3) сделать FILE* это на самом деле выводит в более чем один файл. Смотрите справочную страницу fopencookie(3) Больше подробностей.
  • Сделай трубу, а затем вилку. Разветвленный процесс читает из канала и записывает то, что читает, во все нужные вам файлы. Оригинальный процесс пишет в трубу.
  • взывать tee(1) с подходящими аргументами и записать данные в стандартный ввод tee(1), Посмотри на popen(3) для полезной функции, чтобы сделать это.
Другие вопросы по тегам