先接收一下,本文章主要内容:
1.C标准I/O函数和系统无缓冲函数(Unbuffered I/O函数)关系;
2.I\O函数:buffer && unbuffer;
开始前,我们要清楚linux下C编程与WIN下C编程是不一样的,我们这片文章是linux下C编程,WIN下我并没有进行代码等相关测试。
其次,我们来区分一下C标准I/O函数和C标准I/O函数这两个函数的概念:
C标准I/O函数:
定义在C标准库中,在所有支持C标准库的系统中都能使用C标准库函数。
Unbuffered I/O函数:
每个系统(平台)下的系统函数都不同,这是系统级别的。
现在看看C标准I/O库函数是如何用系统调用实现的。
-
调用
open(2)
打开指定的文件,返回一个文件描述符(就是一个int
类型的编号),分配一个FILE
结构体,其中包含该文件的描述符、I/O缓冲区和当前读写位置等信息,返回这个FILE
结构体的地址。 -
通过传入的
FILE *
参数找到该文件的描述符、I/O缓冲区和当前读写位置,判断能否从I/O缓冲区中读到下一个字符,如果能读到就直接返回该字符,否则调用read(2)
,把文件描述符传进去,让内核读取该文件的数据到I/O缓冲区,然后返回下一个字符。注意,对于C标准I/O库来说,打开的文件由FILE *
指针标识,而对于内核来说,打开的文件由文件描述符标识,文件描述符从open
系统调用获得,在使用read
、write
、
fopen(3)
fgetc(3)