Страницы

Поиск по вопросам

вторник, 19 марта 2019 г.

Как перенаправить вывод функции printf?

Выполняется код загрузчика операционной системы. Имеется только один процесс. Как перенаправить вывод какой-либо сторонней функции на данном участке кода в буфер char* (функция печатает в stdout с помощью printf, код этой функции я исправить не могу)?
Команда, которая работает в консоли "> buffer", естественно, тут работать не будет, да и файлов никаких нет... Код написан на чистом C, но могу написать костыль и на C++.
Подскажите пожалуйста, как решить проблему? Единственный способ, который я знал, тут не будет работать.


Ответ

Есть вариант решения через функцию freopen(), однако следует быть осторожнее в его использовании.
char buffer[BUFSIZ]; freopen("/dev/null", "a", stdout); setbuf(stdout, buffer); // весь вывод через printf будет в буфер printf("simple print"); freopen("/dev/tty", "a", stdout); // возвращаем печать в stdout на консоль printf("%s
", buffer);
в Windows аналогом для /dev/null и /dev/tty служат NULL и CONOUT$ соответственно.

Комментариев нет:

Отправить комментарий