是否可以在重定向前读取 STDOUT?
Is it possible to read STDOUT before redirection?
我正在尝试从 C++ 中的 STDOUT 读取,但我发现的每个示例都暗示使用 pipe
和 dup
,我想知道是否有办法避免它们。假设只是:
cout << "Hello world" << endl;
/* ... */
read(STDOUT_FILENO, buffer, MAX_LEN)
简单的答案是您无法阅读 STDOUT_FILENO
。对 read
的调用将始终 return EBADF
因为 STDOUT_FILENO
无法读取。这就是人们使用 pipe
和 dup
.
的原因
如果您正在寻找一种更多的 C++ 方法来实现我认为您想要做的事情,请查看以下答案:How to redirect cin and cout to files? 如果您将 std::cout
的输出缓冲区替换为你自己的创造,你可以随心所欲地操纵它。不幸的是,这只会捕获到 std::cout
的输出操作,而不是直接调用 write(STDOUT_FILENO, ...)
、printf(...)
之类的东西。这也更不方便(以我的经验)。
我正在尝试从 C++ 中的 STDOUT 读取,但我发现的每个示例都暗示使用 pipe
和 dup
,我想知道是否有办法避免它们。假设只是:
cout << "Hello world" << endl;
/* ... */
read(STDOUT_FILENO, buffer, MAX_LEN)
简单的答案是您无法阅读 STDOUT_FILENO
。对 read
的调用将始终 return EBADF
因为 STDOUT_FILENO
无法读取。这就是人们使用 pipe
和 dup
.
如果您正在寻找一种更多的 C++ 方法来实现我认为您想要做的事情,请查看以下答案:How to redirect cin and cout to files? 如果您将 std::cout
的输出缓冲区替换为你自己的创造,你可以随心所欲地操纵它。不幸的是,这只会捕获到 std::cout
的输出操作,而不是直接调用 write(STDOUT_FILENO, ...)
、printf(...)
之类的东西。这也更不方便(以我的经验)。