是否可以在重定向之前读取标准输出

Is it possible to read STDOUT before redirection?

本文关键字:读取 标准输出 重定向 是否      更新时间:2023-10-16

我试图用C++阅读STDOUT,但我发现的每个例子都意味着使用pipedup,我想知道是否有办法避免它们。让我们说只是:

cout << "Hello world" << endl;
/* ... */
read(STDOUT_FILENO, buffer, MAX_LEN)

简单的答案是您无法从STDOUT_FILENO中读取。对read的调用将始终返回EBADF因为STDOUT_FILENO读取无效。这就是为什么人们使用pipedup .


如果您正在寻找一种更C++的方法来实现我认为您想要做的事情,请查看以下问题的答案:如何将 cin 和 cout 重定向到文件?如果将std::cout 的输出缓冲区替换为自己创建的内容,则可以根据需要对其进行操作。不幸的是,这只会捕获std::cout的输出操作,而不是直接调用write(STDOUT_FILENO, ...)printf(...)等。这也更不方便(根据我的经验)。