gpt4 book ai didi

c - setbuf() - printf() 和 write()

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:09 27 4
gpt4 key购买 nike

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

输出是

Buffer content :
This works

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

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

最佳答案

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

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

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

关于c - setbuf() - printf() 和 write(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com