setbuf() - printf()和write()

问题描述 投票:1回答:1

这是我在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;
}

输出是

缓冲内容: 这有效

你知道为什么吗?因为现在我看不出这是如何工作的,我将stdout传递给stdin,然后读取结果 - 这不是我认为最干净的方法。

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

c stream buffer file-descriptor
1个回答
4
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.