Простой ответ: вы не можете прочитать от STDOUT_FILENO
. Вызов read
всегда будет возвращать EBADF
, потому что STDOUT_FILENO
не является действительной для чтения. Вот почему люди используют pipe
и dup
.
Если вы ищете более C++ подход к тому, что я думаю, что вы хотите сделать, проверить ответ на: How to redirect cin and cout to files? Если заменить std::cout
«s выходной буфер с чем-то своего собственного творения, вы можете манипулируйте им, как хотите. К сожалению, это будет улавливать только операции вывода на std::cout
и не такие вещи, как прямые призывы к write(STDOUT_FILENO, ...)
, printf(...)
и этажерке. Это также неудобно (по моему опыту).
Почему вы хотите прочитать STDOUT? Это выходной канал, предназначенный для записи. – DyZ
Возможный дубликат [C++: Перенаправление STDOUT] (http://stackoverflow.com/questions/4810516/c-redirecting-stdout) - В частности, [этот ответ] (http://stackoverflow.com/a/6211644/1241334) на этот вопрос. –
но - вместо 'cout' - почему бы не поток к' ostringstream' например? – Nim