
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也是输入输出型参数


















