Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814287
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 系统运维

2012-03-29 12:19:25

标准I/O库并不完美。Korn and Vo[1991]列出了许多缺陷:一些在基本设计上,而多数在各种实现上。


一个在标准I/O库里的低效的是数据拷贝的量。当我们使用一次一行函数,fgets和fputs,数据通常被拷贝两次:一次在内核和标准I/O缓冲之间 (当对应的read和write被使用时),另一次在标准I/O缓冲和我们的行缓冲之间。快速I/O库[fio in At&T 1990a]通过下面方式解决这个问题:让这个读取一行的函数返回一个行的指针,而不是把这行拷贝到另一个缓冲里。Hume[1988]指出,通过这个改 变,grep工具的一个版本速度大幅提升。


Korn and Vo[1991]描述另一个标准I/O库的替代:sfio。这个包和fio库的速度相当,通常比标准I/O库快。sfio包还提供了一些在其它库里没有的 新特性:生成的用于同时表示文件和内存区域的I/O流、可以写并可以在I/O流上压栈以改变流的操作的处理模块、和更好的异常处理。


Krieger、Stumm、和Unrau[1992]描述了另一个替代品,它使用映射文件--我们将在14.9节讲述的mmap函数。这个新包被称为 ASI,Alloc Stream Interface。这个编程接口重汇集了UNIX系统内存分配函数(malloc、realloc和free,在7.8节讨论。)和sfio包一 样,ASI试图通过使用指针最小化数据拷贝的量。


在为小内存系统设计的,比如嵌入式系统,的C库里有种标准I/O库的实现。这些实现适度内存请求,超过可移植性,速度,或者功能。两个这种实现是uClibs C库和newlibs C库。

阅读(1026) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~