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

标签 c++ linux stdout

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

cout << "Hello world" << endl;

/* ... */

read(STDOUT_FILENO, buffer, MAX_LEN)

最佳答案

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


如果您正在寻找一种更 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/

相关文章:

linux - 忽略文件 Linux 中的前几行和最后几行

python - 子进程在 PyCharm 中正确显示 sys.stdout 但在控制台中不正确

python - 如果可能的话,如何阻止打印到 stdout 打断输入的内容?

python - 将 chia 绘图检查的输出从控制台保存到文件

C++ ostream格式化

c++ - 调试器卡在函数开始处

linux - Linux 上的可执行格式列表

c++ - 我如何扩展 std::basic_streambuf 以将任何可迭代序列视为流?

java - 在我的 Android 应用程序中使用 ffmpeg.c

linux - 使用 linux 命令删除和替换一行