【发布时间】:2020-03-26 14:56:39
【问题描述】:
所以我知道printf() 比write() 更高级别并最终使用write()。 Printf() 被缓冲,write() 进行系统调用。
示例 1,如果我要在 write() 之前使用 printf() 运行程序,那么它将在 write() 的值之前输出 printf() 的值。
示例 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;
}
我不明白这里发生了什么。在示例 1 中,程序是否在运行 write() 之前等待 printf()s 输出?在示例 2 中,程序是否重定向了第一个准备好的输出?又因为write()是低级,不需要像printf()那样缓冲,所以先打印?
【问题讨论】:
-
查找
setvbuf()和_IONBF、_IOLBF和_IOFBF的含义。当输出到终端时,你会得到_IOLBF行为;当输出到文件时,你会得到_IOFBF行为。
标签: c