产生阻塞的场景:
读设备(dev)文件、读网络文件
tty就是显示终端设备,/dev/tty
这是会读到键盘的值并写道标准输出
第一个hello是自己输入的,是一直在等着,所以是阻塞
非阻塞的代码如下图所示:
此时read返回-1的时候,errno会变成EAGAIN或EWOULDBLOCK,表示非阻塞状态且当前无数据;阻塞情况就是读取错误,所以两个-1的含义是不一样的
但是这样有一个问题:他一直在等,所以可以设置一个超时时间。
设备有数据的时候通知用户才是读数据的最优方法:select poll epoll