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