- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1-2章高级I-O
下载
第1 2章 高 级 I / O
12.1 引言
本章内容包括:非阻塞 I / O 、记录锁、系统 V 流机制、 I / O 多路转接( s e l e c t和p o l l 函数)、
r e a d v 和w r i t e v 函数,以及存储映照I / O (m m a p )。第1 4章、第 1 5章中的进程间通信,以及以后
各章中的很多实例都要使用本章所述的概念和函数。
12.2 非阻塞I / O
1 0 . 5节中曾将系统调用分成两类:低速系统调用和其他。低速系统调用是可能会使进程永
远阻塞的一类系统调用:
• 如果数据并不存在,则读文件可能会使调用者永远阻塞(例如读管道,终端设备和网络设备)。
• 如果数据不能立即被接受,则写这些同样的文件也会使调用者永远阻塞。
• 在某些条件发生之前,打开文件会被阻塞(例如打开一个终端设备可能需等到与之连接
的调制解调器应答;又例如若以只写方式打开 F I F O ,那么在没有其他进程已用读方式打开该
F I F O时也要等待)。
• 对已经加上强制性记录锁的文件进行读、写。
• 某些i o c t l操作。
• 某些进程间通信函数(见第 1 4章)。
虽然读、写磁盘文件会使调用在短暂时间内阻塞,但并不能将它们视为“低速”。
非阻塞I / O使我们可以调用不会永远阻塞的 I / O操作,例如o p e n , r e a d和w r i t e 。如果这种操作
不能完成,则立即出错返回,表示该操作如继续执行将继续阻塞下去。
对于一个给定的描述符有两种方法对其指定非阻塞 I / O :
(1) 如果是调用o p e n 以获得该描述符,则可指定O _ N O N B L O C K标志(见3 . 3节)。
(2) 对于已经打开的一个描述符,则可调用 f c n t l打开O _ N O N B L O C K文件状态标志(见3 . 1 3
节)。程序3 - 5 中的函数可用来为一个描述符打开任一文件状态标志。
早期的系统V版本使用标志O _ N D E L AY指定非阻塞方式。在这些版本中,如
果无数据可读,则r e a d 返回值0 。而U N I X 又常将r e a d 的返回值0解释为文件结束,
两者有所混淆。 P O S I X . 1 则提供了一个非阻塞标志,它的名字和语义都与
O _ N D E L AY不同。P O S I X . 1要求,对于一个非阻塞的描述符如果无数据可读,则
r e a d 返回 -1,并且e r r n o被设置为 E A G A I N 。S V R 4支持较老的 O _ N D E L AY 和
P O S I X . 1 的O _ N O N B L O C K ,但在本书的实例中只使用 P O S I X . 1 规定的特征。
O _ N D E L AY 的使用只是为了向后兼容,不应在新应用程序中使用。
4 . 3 B S D 为f c n t l提供F N D E L AY 标志,其语义也稍有区别。它不只影响该描述
符的文件状态标志,还将终端设备或套接口的标志更改成非阻塞的,因此影响了
终端或套接口的所有用户,不只是影响共享同一文件表项的用户( 4 . 3 B S D非阻塞
I / O 只对终端和套接口起作用)。如果对一个非阻塞描述符的操作不能无阻塞地完
2 7 4 U N I X环境高级编程
下载
成,那么4 . 3 B S D返回E W O U L D B L O C K 。4 . 3 + B S D提供P O S I X . 1 的O _ N O N B L O C K
标志,但其语义却类似于4 . 3 B S D 的F N D E L AY 。非阻塞I / O通常用来处理终端设备
或网络连接,而这些设备通常一次由一个进程使用。这就意味着 B S D语义的更改
通常不会影响我们。出错返回E W O U L D B L O C K而不是P O S I X . 1 的E A G A I N ,这造
成了可移植性问题,必须处理这一问题。 4 . 3 +
文档评论(0)