1,c语言缓存区在哪里呢?
答案是在FILE* 指向的结构体里面,c语言每打开一个文件都会有一个FILE* 和一个对应的file结构体。这里结构体里面就维护了当前文件的缓存区。
2,实验1.
结果:
结果就是顺序输出
此时感觉时正常得是吧。
3,实验2
当我们取下掉\0之后,结果就改变了。
结果:
分析:为什么呢,调用c语言的都打印了俩边呢?答案就是c语言的刷新策略是采用行刷新的,我我们在结尾不加\0时,就不会立即的刷新,那么就会先把数据保存在缓存区,然后再进程退出时刷新,但是也不是刷新俩变得结果啊,为什么呢?答案就只能时fork了。fort之后父子进程的缓存区的数据也是会发生写实拷贝的,所以再进程退出时刷新缓存区,当然会刷新出俩份了啊。但是系统调用时最原生的,c语言时分装了系统调用,然后加了缓存区,所以系统调用还是一份数据。
4,加深理解,自己模拟分装一下c语言的文件库函数。
简单分装FILE结构体:
fopen实现:
刷新缓存区函数
fwrite实现