C перенаправить стандартный вывод в несколько мест
Это довольно легко перенаправить вывод в другое место назначения. Я могу легко достичь этого с помощью:
freopen ("/def/tty0", "w", stdout);
printf ("Redirected");
fclose (stdout);
Но как я мог перенаправить его на два или более файлов? Мне нужна функциональность, аналогичная этой, предоставляемой "тройником".
Есть ли хорошо известный подход?
1 ответ
Решение
Это невозможно сделать напрямую: каждый дескриптор файла назначается ровно одному ресурсу (обычно файлу). Если вы хотите написать в FILE
Чтобы получить записи в несколько файлов, вы должны сделать несколько трюков. Вот несколько идей:
- Используйте функцию только для GNU
fopencookie(3)
сделатьFILE*
это на самом деле выводит в более чем один файл. Смотрите справочную страницуfopencookie(3)
Больше подробностей. - Сделай трубу, а затем вилку. Разветвленный процесс читает из канала и записывает то, что читает, во все нужные вам файлы. Оригинальный процесс пишет в трубу.
- взывать
tee(1)
с подходящими аргументами и записать данные в стандартный вводtee(1)
, Посмотри наpopen(3)
для полезной функции, чтобы сделать это.