库函数和系统调用函数的区别+读写文件到硬盘流程例子+补充说明

一、系统调用(系统调用函数)

系统调用函数属于操作系统的一部分,是为了提供给用户进行操作的接口(API函数),使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机、显示器)等进行交互。

  • 例如常见的系统调用 等等write read open ....

二、库函数

(1)库函数可分为两类,一类是C语言标准库函数,一类是编译器特定的库函数。
(2)库函数可以理解为是对系统调用函数的一层封装。尽管系统函数执行效率是比较高效而精简的,但有时我们需要对获取的信息进行更复杂的处理,或更人性化的需要,我们把这些处理过程封装成一个函数,再将许多这类的函数放在一个文件(库)一般放在 .lib文件。最后再供程序员使用。

  • #include<stdio.h>//使用的时候包含头文件就可以使用其中的库函数了
  • 例如常见的库函数printf fwrite fread fopen....等等

三、将hello写入文件 1.txt流程(库函数和系统调用在其中的使用)

  1. 首先fopen打开文件 fwrite参数附上要写入的内容

  2. 文本内容来到C标准缓冲区

  3. 如果满足条件就刷新C标准缓冲区,调用系统函数write进行写(补充:满了就会自动刷新)

  4. write却只是把要写入的内容写到内核缓冲区

  5. 如果内核缓冲区满足条件就刷新内核缓冲区,系统调用sys_write将缓冲区内容写入到磁盘(补充:有个进程会定时刷新内核缓冲区)

  6. 此时有进程读取1.txt文件内容,发现内核缓冲区就有这个文件内容,就直接从内核缓冲区读取

在这里插入图片描述

四、为什么要有缓冲区(补充)

定义:缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入硬盘中的文件,类似于数据库的批量操作。
好处:减少对硬盘的直接操作,硬盘的执行速度为毫秒级别,内存为纳秒级别。在硬盘直接操作读写效率太低。

五、内核缓冲区和C标准缓冲区的区别

C语言标准库函数fopen()每打开一个文件时候,其都会对应一个单独一个缓冲区而内核缓冲区是公用的

六、如何刷新C标准缓冲区

缓冲区满、程序的正常结束、fclose、fflush 终端中\n等等

猜你喜欢

转载自blog.csdn.net/weixin_44972997/article/details/107922503