setbuf() - printf() 和 write()

setbuf() - printf(), and write()

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

所以,我正在尝试使用 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;
}

输出为

Buffer content :
This works

你知道为什么吗? 因为现在我不知道这是如何工作的,所以我会将 stdout 通过管道传输到 stdin,然后读取结果——我认为这不是最干净的方法。

谢谢,祝你有愉快的一天!

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

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

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