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

时间:2017-01-16 21:03:12

标签: c++ linux stdout

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

cout << "Hello world" << endl;

/* ... */

read(STDOUT_FILENO, buffer, MAX_LEN)

1 个答案:

答案 0 :(得分:2)

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

的原因

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