欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux高级程序设计——I/O函数——系统调用与库函数

程序员文章站 2024-03-11 20:23:25
...

系统调用与库函数

库函数由两类函数组成

1.不需要调用系统调用

不需要切换到内核空间即可完成函数全部功能,并且将结果反馈给应用程序,如strcpy,bzero等字符串操作函数。

2.需要调用系统调用

需要切换到内核空间,这类函数通过封装系统调用去实现相应功能,如printf,fread等

库函数与系统调用的关系

并不是所有的系统调用都被封装成了库函数,系统提供的很多功能都必须通过系统调用才能实现。
Linux高级程序设计——I/O函数——系统调用与库函数
系统调用是需要时间的,程序中频繁使用系统调用会降低程序的运行效率。
当运行内核代码时,CPU工作在内核态,在系统调用发生前需要保存用的栈和内存环境,然后转入内核态工作。
系统调用结束后,又要切换回用户态,这种环境的切会消耗血多时间。
库函数访问文件的时候根据需要,设置不同类型的缓冲区,从而减少了直接调用IO系统的次数,提高了访问效率
Linux高级程序设计——I/O函数——系统调用与库函数应用程序调用printf函数时,函数执行的过程,如下图
Linux高级程序设计——I/O函数——系统调用与库函数
总结:
大多是库函数的本质也是系统调用,
只不过库函数有了缓冲区,用于减少系统调用的次数