Выполняется код загрузчика операционной системы. Имеется только один процесс.
Как перенаправить вывод какой-либо сторонней функции на данном участке кода в буфер 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$ соответственно.
Комментариев нет:
Отправить комментарий