5.13 标准I/O的替代软件

5.13 标准I/O的替代软件

标准I / O库并不完善。K o r n和Vo〔1 9 9 1〕列出了它的很多不足之处—某些属于基本设计,但是大多数则与各种不同的实现有关。

在标准I / O库中,一个效率不高的不足之处是需要复制的数据量。当使用每次一行函数fgets和fputs时,通常需要复制两次数据:一次是在内核和标准I / O缓存之间(当调用read和write时),第二次是在标准I / O缓存和用户程序中的行缓存之间。快速I / O库〔AT&T 1990a中的fio ( 3 )〕避免了这一点,其方法是使读一行的函数返回指向该行的指针,而不是将该行复制到另一个缓存中。H u m e〔1 9 8 8〕报告了由于作了这种更改, g r e p ( 1 )公用程序的速度增加了2倍。

K o r n和Vo〔1 9 9 1〕说明了标准I / O库的另一种代替版:sfio。这一软件包在速度上与fio相近,通常快于标准I / O库。sfio也提供了一些新的特征:推广了I / O流,使其不仅可以代表文件,也可代表存储区;可以编写处理模块,并以栈方式将其压入I / O流,这样就可以改变一个流的操作;较好的异常处理等。

K r i e g e r, Stumm和U n r a u〔1 9 9 2〕说明了另一个代换软件包,它使用了映照文件—mmap函数,我们将在1 2 . 9节中说明此函数。该新软件包称为ASI(Alloc Stream Interface)。其程序界面类似于U N I X存储分配函数(malloc, realloc和f r e e,这些将在7 . 8节中说明)。与sfio软件包相同,A S I使用指针力图减少数据复制量。

许多标准IO库实现可用于C函数库中,这种C函数库是为内存较小的系统(例如嵌入式系统)设计的。这些实现对于合理内存要求的关注超过对可移植性、速度以及功能性等方面的关注。这类函数库的两种实现是:uClibc C库(http://www.uclibc.org )和newlibc C库(http://sourceware.org/newlib/)。

原文地址:https://www.cnblogs.com/shaoguangleo/p/2805989.html