库函数和系统调用函数的区别+读写文件到硬盘流程例子+补充说明
一、系统调用(系统调用函数)
系统调用函数属于操作系统的一部分,是为了提供给用户进行操作的接口(API函数),使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机、显示器)等进行交互。
例如常见的系统调用 等等write read open ....
二、库函数
(1)库函数可分为两类,一类是C语言标准库函数,一类是编译器特定的库函数。
(2)库函数可以理解为是对系统调用函数的一层封装。尽管系统函数执行效率是比较高效而精简的,但有时我们需要对获取的信息进行更复杂的处理,或更人性化的需要,我们把这些处理过程封装成一个函数,再将许多这类的函数放在一个文件(库)一般放在 .lib文件。最后再供程序员使用。
#include<stdio.h>//使用的时候包含头文件就可以使用其中的库函数了
例如常见的库函数printf fwrite fread fopen....等等
三、将hello写入文件 1.txt流程(库函数和系统调用在其中的使用)
-
首先fopen打开文件 fwrite参数附上要写入的内容
-
文本内容来到C标准缓冲区
-
如果满足条件就刷新C标准缓冲区,调用系统函数write进行写(补充:满了就会自动刷新)
-
write却只是把要写入的内容写到内核缓冲区
-
如果内核缓冲区满足条件就刷新内核缓冲区,系统调用sys_write将缓冲区内容写入到磁盘(补充:有个进程会定时刷新内核缓冲区)
-
此时有进程读取1.txt文件内容,发现内核缓冲区就有这个文件内容,就直接从内核缓冲区读取
四、为什么要有缓冲区(补充)
定义:缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入硬盘中的文件,类似于数据库的批量操作。
好处:减少对硬盘的直接操作,硬盘的执行速度为毫秒级别,内存为纳秒级别。在硬盘直接操作读写效率太低。
五、内核缓冲区和C标准缓冲区的区别
C语言标准库函数fopen()每打开一个文件时候,其都会对应一个单独一个缓冲区而内核缓冲区是公用的。
六、如何刷新C标准缓冲区
缓冲区满、程序的正常结束、fclose、fflush 终端中\n等等