当前位置: 技术问答>linux和unix
Linux下read函数默认到底是阻塞的还是非阻塞的?
来源: 互联网 发布时间:2017-01-28
本文导语: Unix网络编程那边书上说,read默认就是阻塞的,但我怎么在Linux2.6.25 fc9下感觉read()默认就是非阻塞的捏? 1. Linux下read函数默认到底是阻塞的还是非阻塞的? 2. 怎样让read在无数据可读的时候阻塞调用进程/线程捏? ...
Unix网络编程那边书上说,read默认就是阻塞的,但我怎么在Linux2.6.25 fc9下感觉read()默认就是非阻塞的捏?
1. Linux下read函数默认到底是阻塞的还是非阻塞的?
2. 怎样让read在无数据可读的时候阻塞调用进程/线程捏?
谢谢大家!
1. Linux下read函数默认到底是阻塞的还是非阻塞的?
2. 怎样让read在无数据可读的时候阻塞调用进程/线程捏?
谢谢大家!
|
你在读什么东西时候判断是否阻塞?如果是块设备或者块设备上的文件,这些被定义为快速设备的对象,是无论如何都不会阻塞的;某些 char 设备、pipe, fifo, socket 等“慢速设备”在读写时候会阻塞。
|
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果。