I/O处理方式

I/O处理的5种模型

  • 阻塞I/O模型

若所调用的I/O函数没有完成相关的功能就会使进程挂起,直到相关数据到达才返回。如:键盘、屏幕、终端、网络设备(低速I/O设备)的访问。若不设置默认均为阻塞模式。

  • 非阻塞模型

当请求的I/O操作不能完成时,则不让进程休眠,而且返回一个错误。如:open、read、write访问。

  • I/O多路转接模型

如果请求的I/O操作阻塞,且他不是真正阻塞I/O,而且让其中的一个函数等待,在这期间,I/O还能进行其他操作。如:select函数。

  • 信号驱动I/O模型

在这种模型下,通过安装一个信号处理程序,系统可以自动捕获特定信号的到来,从而启动I/O。

  • 异步I/O模型

在这种模型下,当一个描述符已准备好,可以启动I/O时,进程会通知内核。由内核进行后续处理,这种用法现在较少。 

 

非阻塞I/O

  • 低速的系统调用(键盘、屏幕),进程可能会阻塞
  • 非阻塞I/O确定操作(read,open,write)不阻塞,如果操作不能完成,则出错返回。
  • 设定非阻塞的方式
  1. 使用open打开文件,设置O_NONBLOCK标志。
  2. 如果一个文件已经打开,则使用fcntl修改文件状态标志。 亦可以使用已经封装好的set_fl,设置O_NONBLOCK标志。
  3. 若不设置默认均为阻塞模式。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值