Страницы

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

пятница, 24 января 2020 г.

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

#c #boot


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

Команда, которая работает в консоли "> buffer", естественно, тут работать не будет,
да и файлов никаких нет... Код написан на чистом C, но могу написать костыль и на C++.

Подскажите пожалуйста, как решить проблему? Единственный способ, который я знал,
тут не будет работать.
    


Ответы

Ответ 1



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

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

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