我正在尝试从 C++ 中的 STDOUT 读取,但我发现的每个示例都暗示使用 pipe
和 dup
,我想知道是否有办法避免它们。让我们说:
cout << "Hello world" << endl;
/* ... */
read(STDOUT_FILENO, buffer, MAX_LEN)
最佳答案
简单的答案是您无法从 STDOUT_FILENO
中读取。调用read
将始终返回 EBADF
,因为 STDOUT_FILENO
无法读取。这就是人们使用 pipe
和 dup
的原因。
如果您正在寻找一种更 C++ 的方法来实现我认为您想要做的事情,请查看以下答案:How to redirect cin and cout to files?如果您将 std::cout
的输出缓冲区替换为您自己创建的内容,您可以随意操作它。不幸的是,这只会捕获到 std::cout
的输出操作,而不是像直接调用 write(STDOUT_FILENO, ...)
、printf(.. .)
等等。这也更不方便(以我的经验)。
关于c++ - 是否可以在重定向前读取 STDOUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684943/