1.IO = 等 + 数据拷贝
等好了 -> IO事件就绪
(“等”是做了条件检测)
2. IO的五种模型
1.阻塞IO
2.非阻塞IO
如果内核还未将数据准备好
,
系统调用仍然会直接返回
,
并且返回
EWOULDBLOCK
错误码
非阻塞
IO
往往需要程序员循环的方式反复尝试读写文件描述符
,
这个过程称为
轮询
.
这对
CPU
来说是较大的浪费
,
一
般只有特定场景下才使用
3.信号驱动(容易出问题)
4.多路复用/多路转接IO
虽然从流程图上看起来和阻塞
IO
类似
.
实际上最核心在于
IO
多路转接能够同时等待多个文件
描述符的就绪状态
.
---同步IO
5.异步IO(并不是特别好的方案)
(助记)
3.fcntl
将cin设为非阻塞的一些情况
效果(EAGAIN里加个sleep(1) 和打印"date not ready\n")
4.多路转接select
返回值
fd_set
(fd_set源码)
解释readfds
传入的是要读的,会传出其中就绪的:
大小是28*8bit
例子
timeout也是输入输出型参数