【问题标题】:Is it possible to read STDOUT before redirection?是否可以在重定向之前读取 STDOUT?
【发布时间】:2017-01-16 21:03:12
【问题描述】:

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

cout << "Hello world" << endl;

/* ... */

read(STDOUT_FILENO, buffer, MAX_LEN)

【问题讨论】:

  • 为什么要阅读 STDOUT?它是一个用于写作的输出通道。
  • C++: Redirecting STDOUT 的可能重复项 - 特别是 this answer 对那个问题。
  • 但是 - 而不是 cout - 为什么不流式传输到 ostringstream 例如?

标签: c++ linux stdout


【解决方案1】:

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2011-02-16
    • 1970-01-01
    • 2011-10-04
    • 2019-02-08
    • 2013-03-09
    相关资源
    最近更新 更多