printf除非换行符在格式字符串中,为什么在调用后不刷新?这是POSIX的行为吗?我怎么可能printf每次都立即冲洗?
所以我知道printf()比write()使用更高级别并且最终使用write().Printf()缓冲并write()进行系统调用.
例1,如果我在printf()之前运行程序,write()那么它将输出值printf()之前的值write().
例2,如果我要运行相同的程序并让它通过输出重定向到一个文件,write()输出的值之前printf().
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("This is a printf test\n");
write(STDOUT_FILENO, "This is a write test\n", 21);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这里发生了什么.在示例1中,程序是否printf()在运行之前等待s输出write()?在示例2中,程序是否重定向准备好的第一个输出?而且因为write()是较低级别,并且不需要像那样缓冲printf()它首先打印?