是否可以在重定向前读取 STDOUT?

Is it possible to read STDOUT before redirection?

我正在尝试从 C++ 中的 STDOUT 读取,但我发现的每个示例都暗示使用 pipedup,我想知道是否有办法避免它们。假设只是:

cout << "Hello world" << endl;

/* ... */

read(STDOUT_FILENO, buffer, MAX_LEN)

简单的答案是您无法阅读 STDOUT_FILENO。对 read 的调用将始终 return EBADF 因为 STDOUT_FILENO 无法读取。这就是人们使用 pipedup.

的原因

如果您正在寻找一种更多的 C++ 方法来实现我认为您想要做的事情,请查看以下答案:How to redirect cin and cout to files? 如果您将 std::cout 的输出缓冲区替换为你自己的创造,你可以随心所欲地操纵它。不幸的是,这只会捕获到 std::cout 的输出操作,而不是直接调用 write(STDOUT_FILENO, ...)printf(...) 之类的东西。这也更不方便(以我的经验)。