APUE 第十四章 高级I/O

I/O 分为阻塞和非阻塞,阻塞就是我要一个东西,然后得不到就在那等,非阻塞就是,我要一个东西,对方立马返回结果说没有,那我就继续做其他的事,要设置非阻塞,方法有:

1.open需要指定O_NONBLOCK

2. set_fl指定文件状态标志为O_NONBLOCK

标准输出是普通文件或者终端STDOUT,STDERR,那么结果可能是不同的

14.3 记录锁

更准去的来说,是字节范围锁,也即给部分文件加锁

看到父进程和子进程之间的关系图,太无聊了

加锁,没啥要读的 看到402 强制性锁和建议性锁

14.4 I/O多路转接

阻塞IO 就是我要一个东西,得不到就死等, 非阻塞就是 我要一个东西,得不到就立即返回,过一回再来要(轮询)
非阻塞IO可以提升效率,但是这种技术依赖于信号量,因此只适合终端设备和网络IO

14.4.1 select和pselect

Maxfdp1 为描述符最大值 + 1, readfds,writefds等为select关心的读,写的描述符集合,如果readfds有readfds[i]是准备好,则该readfds[i]置为1

pselect和select其实是类似的

14.4.2 poll函数


nfds为数组fdarray的长度,pollfd结构体如下:

 

events为我们对文件描述符fd感兴趣的事件, revents为在fd上发生过的时间:

 总而言之,poll就是把一堆感兴趣的fd传进去,并表明对这些fd的哪些事件感兴趣

14.5 异步I/O

14.5.1 ~14.5.2 system V和bsd异步I/O


其实都是用信号量来完成的

14.5.3 POSIX异步I/O


其实就是AIO

结构有个sigevent,用来表示IO完成以后,我们应该采取的的动作

其中字段sigev_notify表示通知的类型: 

SIGREV_NONE 不通知进程

SIGREV_SIGNAL 发给捕捉该信号的进程,入队

SIGREV_THREAD 执行sigev_notify_function指定的函数

看到424页
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值