2017-01-16 2 views
0

Я пытаюсь читать из STDOUT в C++, но каждый пример я нахожу подразумевает использование pipe и dup и мне интересно, если есть способ, чтобы избежать их. Скажем так:Возможно ли прочитать STDOUT перед перенаправлением?

cout << "Hello world" << endl; 

/* ... */ 

read(STDOUT_FILENO, buffer, MAX_LEN) 
+1

Почему вы хотите прочитать STDOUT? Это выходной канал, предназначенный для записи. – DyZ

+0

Возможный дубликат [C++: Перенаправление STDOUT] (http://stackoverflow.com/questions/4810516/c-redirecting-stdout) - В частности, [этот ответ] (http://stackoverflow.com/a/6211644/1241334) на этот вопрос. –

+0

но - вместо 'cout' - почему бы не поток к' ostringstream' например? – Nim

ответ

2

Простой ответ: вы не можете прочитать от 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(...) и этажерке. Это также неудобно (по моему опыту).

Смежные вопросы