文件缓冲区
有时候我们在调用c语言接口如fwrite,fputs,fputc等,但是我们有时候会看到一种特别的现象,我们明明向显示器打印,但是却没有显示,我们先看一段代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
const char * str = "hello 标准输出\n";
write(1,str,strlen(str));
printf("%s",str);
fprintf(stdout,"%s",str);
fputs(str,stdout);
//close(1);
}
这段代码毋庸置疑可以打印4句“hello 标准输出”,我们看结果。
我们将它重定向到文件中查看也是正确的,重定向的原理我在上节已经讲过,不知道小伙伴可以看下。
但是我们将close(1)打开,同样将它运行重定义到文件中,我看到结果如下图:
这是文件中只有一条打印,毋庸置疑这条log是系统调用write产生的,那么问题来了,c语言打印的3条log去哪里了,要弄清这个问题,我们需要明白文件缓冲区的概念。
可以看出c语言中有一个自己的缓冲区,当我们打印内容的时候会先向缓冲区中写入,说到这不少小伙伴可能会有疑问,那我们平时printf的时候。看如下代码
#include<stdio.h>
#include<