【发布时间】:2018-09-03 15:28:01
【问题描述】:
这是我在 Stackoverflow 上的第一步!
所以,我正在尝试使用setbuf() 将stdout 重定向到char buffer[BUFSIZ]。当我使用printf() 时它工作得很好,但当我使用系统调用write() 时就不行了。
下面是代码示例:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buffer[BUFSIZ];
freopen("/dev/null", "a", stdout);
setbuf(stdout, buffer);
printf("This works\n");
write(stdout->_file, "This doesn't.\n", 14);
fflush(stdout);
freopen("/dev/tty", "a", stdout);
printf("Buffer content :\n%s", buffer);
return 0;
}
输出是
缓冲区内容:
这行得通
你知道为什么吗? 因为现在我不知道这是如何工作的,所以我会将标准输出通过管道传输到标准输入,然后读取结果——我认为这不是最干净的方法。
谢谢你,祝你有美好的一天!
【问题讨论】:
-
write函数完全绕过缓冲的标准 I/O 系统。 -
如您所说:
write不是标准的 C 函数。setbuf是。
标签: c stream buffer file-descriptor