- Linux程序设计(第4版)
- (英)Neil Matthew Richard Stones
- 543字
- 2021-04-09 20:04:43
3.3 库函数
针对输入输出操作直接使用底层系统调用的一个问题是它们的效率非常低。为什么呢?
❑ 使用系统调用会影响系统的性能。与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。减少这种开销的一个好方法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。例如,每次读写大量的数据而不是每次仅读写一个字符。
❑ 硬件会限制对底层系统调用一次所能读写的数据块大小。例如,磁带机通常一次能写的数据块长度是10k。所以,如果你试图写的数据量不是10k的整数倍,磁带机还是会以10k为单位卷绕磁带,从而在磁带上留下了空隙。
为了给设备和磁盘文件提供更高层的接口,Linux发行版(和UNIX)提供了一系列的标准函数库。它们是一些由函数构成的集合,你可以把它们应用到自己的程序中,比如提供输出缓冲功能的标准I/O库。你可以高效地写任意长度的数据块,库函数则在数据满足数据块长度要求时安排执行底层系统调用。这就极大降低了系统调用的开销。
库函数的文档一般被放在手册页的第三节,并且库函数往往会有一个与之对应的标准头文件,例如与标准I/O库对应的头文件是stdio.h。
图3-2是对前面几小节讨论的总结,它显示了Linux系统中各种文件函数与用户、设备驱动程序、内核和硬件之间的关系。
图3-2