setbuf() - printf() 和 write()

0 c buffer file-descriptor stream

这是我在 Stackoverflow 上迈出的第一步!

所以,我试图使用setbuf()重定向stdoutchar 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;
}
Run Code Online (Sandbox Code Playgroud)

输出是

缓冲区内容:
这有效

你知道为什么吗?因为现在我不知道这是如何工作的,我将通过管道将标准输出传输到标准输入,然后读取结果 - 我认为这不是最干净的方法。

谢谢你,祝你有美好的一天 !

Som*_*ude 5

write函数是低级 POSIX 函数,其运行级别低于 C 标准输出函数。

通过write直接使用,您可以绕过 stdio 缓冲。如果您想使用缓冲区,请fwrite改用标准 C 函数。

另请注意 是stdout,FILE*FILE一个不透明的数据结构。您永远不应该尝试直接使用它的成员。