文件IO
read
阻塞:IO操作是否阻塞,是可以通过fcntl来设置
fcntl函数
int fcntl(int fd, int cmd, long arg);
设置非阻塞模式
int flag;
flag = fcntl(socketfd, F_GETFL, 0);
flag |= O_NONBLOCK;
fcntl(socketfd, F_SETFL, flag);
设置阻塞模式
int flag;
flag = fcntl(socketfd, F_GETFL, 0);
flag &= ~O_NONBLOCK;
fcntl(socketfd, F_SETFL, flag);
阻塞/非阻塞默认情况:
读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。从终端设备或网络读则不一定,如果从终端输入的数据没有换行符,调用read读终端设备就会阻塞,如果网络上没有接收到数据包,调用read从网络读就会阻塞,至于会阻塞多长时间也是不确定的,如果一直没有数据到达就一直阻塞在那里。同样,写常规文件是不会阻塞的,而向终端设备或网络写则不一定。