Linux 缓冲区和文件系统
一、FILE 结构
1、fd
FILE 是在 C 中封装起来的一个结构体,访问文件的时候都是通过 fd 访问的,自然在 FILE 中是封装了 fd 的。FILE 结构体中,int _file 存放的就是 fd,其他的成员基本都是与缓冲区有关的。

2、缓冲区
(一)有换行有 return 全部打印
看下面一段代码:


(二)无换行无 return 的 C 接口打印
很显然的,我们打印出了所有我们需要的内容,我们再看下一段。


理想状态下我们应该是打印出结果后然后进行 while 一直循环,实际上是一直不会打印,这是为什么呢?是的,待在缓冲区里。
首先我们要知道,缓冲区的大概位置。我们上面贴了一张 FILE 结构体的结构图,我们可以很清楚地看到缓冲区是 FILE 的成员指针指向的一块位置,也就是说缓冲区一定在用户空间而不是内核空间。

(三)无换行无 return 的系统调用接口打印
我们在调用上面三个函数的时候,都是调用的 C 接口,自然都待在缓冲区里了,我们再看下一个程序。
















