系统级I/O·十一

第11章 系统级I/O
关键词:系统级I/O,标准I/O,Unix I/O,输入/输出,Rio
为了更加有效地管理存储器并且少出错,现代系统提供了一种对主存的抽象概念
输入/输出(I/O)是在主存(main memory)和外部设备(例如磁盘驱动器、终端和网络)之间拷贝数据的过程。输入操作是从I/O设备拷贝数据到内存,而输出操作则是从主存拷贝数据到I/O设备。
所有的运行时系统都提供执行I/O的较高级别的工具,例如,ANSI C提供标准的I/O库,包含像printf和scanf这样执行带缓冲的I/O函数。C++语言用它的重载操作符<<(输入)和>>(输出)提供了类似的功能。在Unix系统,是通过使用内核提供的系统级Unix I/O函数来实现这戏较高级别的I/O函数的。

11.1 Unix I/O

一个Unix文件就是一个m字节的序列B0,B1,…,Bk,B(m-1)
所有的I/O设备,例如网络、磁盘和中断,都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备优雅地映射为文件的方式,允许Unix内核以一种统一的且一致的方式来执行:
打开文件
改变当前的文件位置
读写文件
关闭文件

11.2 用Rio包健壮地读和写

Rio(robust I/O,健壮的I/O包),它提供了两类不同的函数:
无缓冲的输入输出函数:
带缓冲的输入函数

11.3 读取文件元数据

11.4共享文件

Unix共享文件的内核用三种相关的数据结构来表示打开的文件:
描述符表(descriptor table):每个文件都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的。每个打开的描述符表项指向文件表中的一个表项。
文件表(file table):打开文件的集合是由一张文件表来表示的,所有的进程共享这张表。
v-node表(v-node table):同文件表一样,所有的进程共享v-node表。
多个描述符也可以通过不同的文件表项来引用同一个文件。关键思想是每个描述符都有它自己的文件位置,所以对不同描述符的读操作可以从文件的不同位置获取数据。

11.5 标准I/O

ANSI C定义了一组高级输入输出函数,成为标准I/O库,为程序员提供了Unix I/O的较高级别的接口。这个库(libc)提供了打开和关闭文件的函数(fopen和fclose)、读和写字节的数据(fread和fwrite)、读和写字符串的函数(fgets和fputs),以及复杂的格式化I/O函数(scanf和printf)。
标准I/O库将一个打开的文件模型化为一个流(stream)。对于程序而言,一个流就是一个指向类型为FILE结构的指针。每个ANSI C程序开始时都有是那个打开的流stdin、stdout和stderr,分别对应与标准输入、标准输出和标准错误。
类型为FILE的流是对文件描述符和流缓冲区(stream buffer)的抽象。流缓冲区的目的和Rio读缓冲区的一样:就是使开销较高的Unix I/O系统调用的数量尽可能得小。

11.6 总是:我该使用哪些I/O函数

图 1 Unix I/O、标准I/O和Rio之间的关系
Unix I/O是在操作系统内核中实心的。应用程序可以通过open、close、lseek、read和write这样的函数来访问Unix I/O。

11.7小结

Unix提供了少量的系统级函数,他们允许应用程序打开、关闭、读和写文件,提取文件的元数据,以及执行I/O重定向。Unix的读和写操作会出现不足值(short counts),应用程序必须能正确地预计和处理这种情况。应用程序不直接调用Unix I/O函数,而应该适用Rio包, Rio包通过反复执行读写操作,直到传送玩所有的请求数据,自动处理不足值。
Unix内核使用三种相关的的数据结构来表示打开的文件。描述符表中的表项指向打开文件表中的表项,而打开文件表中的表项又指向v-node表中的表项。每个进程都有它自己单独的描述符表,而所有的进程共享同一打开文件表和v-node表。理解这些结构的一般构成能使我们清楚地理解文件共享和I/O重定向。
标准 I/O库是基于Unix  I/O实现的,并提供了一组强大的高级 I/O例程。对于大多数应用程序而言,标准 I/O更简单,是优于Unix  I/O的选择,然而因为对标准 I/O和网络文件的一些相互不兼容的限制,Unix  I/O比之标准 I/O更适用于网络应用程序。

参考文献

布赖恩特, O'Hallaron D, et al. 深入理解计算机系统[M]. 中国电力出版社, 2004.
Bryant R, David Richard O H, David Richard O H. Computer systems: a programmer's perspective[M]. Upper Saddle River: Prentice Hall, 2003.
Reek K A. Pointers on C[M]. Addison-Wesley Longman Publishing Co., Inc., 1997.
Koenig A. C traps and pitfalls[M]. Pearson Education India, 1988.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ACMSunny

赠人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值