1. 系统调用与库函数区别

文件操作接口四:(系统调用与库函数)

1. 系统调用定义:

进程直接调用内核暴露出来的的接口的方式称为系统调用

2.库函数定义:

调用将内核暴露出来的接口封装好的函数的方法为库函数的调用
注:有的库函数不需要封装内核暴露出来的接口

3.运行位置

库函数:在用户态调用,在用户态执行
系统调用函数:在用户态调用,在内核态执行

4.执行效率

当处理的数据量比较小时,函数库的函数执行效率比较好
因为函数库的函数的作法是将要处理的数据先存入缓冲区内,等到缓冲区装满了,再将数据一次写入或者读出。这种方式处理小量数据时效率比较高。但是在进行系统调用时,因为用户进程从用户模式进入系统内核模式,中间涉及了许多额外的任务的切换工作,这些操作称为上下文切换,此类的额外工作会影响系统的执行效率。

5.关联

系统调用通常是用于底层文件的访问
例如在驱动程序中对设备文件的直接访问

库函数是对系统调用的一层封装
因此在用库函数对文件操作的时候,必然会引起系统调用。也就是说,库函数调用实际上是通过系统调用实现的,例如:C库函数fwrite()就是通过write实现的。

6.用户态切换内核态

1、调用系统调用函数 → 软中断
2、缺页异常 → 硬中断

7.缓冲区

分为输入缓冲区(scanf)、输出缓冲区(printf)
输出缓冲区的条件
1、程序结束(不能以_exit/_Exit结束);
2、遇到“\n”;
3、主动刷新fflush(stdout);
4、缓冲区满

参考

https://blog.csdn.net/like_that/article/details/90347492

相关文章:

  • 2021-10-16
  • 2021-06-04
  • 2022-01-17
  • 2022-12-23
  • 2021-06-07
  • 2022-02-23
  • 2021-05-05
猜你喜欢
  • 2021-12-29
  • 2022-02-25
  • 2021-12-05
  • 2021-05-10
  • 2022-01-14
  • 2021-05-21
  • 2021-12-31
相关资源
相似解决方案