我试图用C ++中的STDOUT读取,但我发现的每个例子都暗示使用pipe
和dup
,我想知道是否有办法避免它们。我们只说:
cout << "Hello world" << endl;
/* ... */
read(STDOUT_FILENO, buffer, MAX_LEN)
答案 0 :(得分:2)
简单的答案是您无法从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(...)
等等。它也更加不方便(根据我的经验)。