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,然后读取结果——我认为这不是最干净的方法。
谢谢,祝你有愉快的一天!
这是我在 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,然后读取结果——我认为这不是最干净的方法。
谢谢,祝你有愉快的一天!