第一:利用阻塞式I/O和非阻塞式I/O对文件进行读写操作的时候,在调用open()函数的时候,打开文件时,为参数flags指定O_NONBLOCK标志,open()调用成功后,后续I/O操作以非阻塞的方式进行操作。如果没有指定O_NONBLOCK标志,默认是阻塞方式I/O进行操作。

第二:本次实验练习,以鼠标为例,使用两种I/O方式进行读写,来进行对比,鼠标是一种输入设备,对应的设备文件在/dev/input/目录下。

 第三:通常情况下是mouseX(X表示序号0、1、2),但是也不一定,也有可能是eventX,如何确定到底是那个设备,可以通过对设备文件进行读写来判断,使用od命令;

sudo od -x /dev/input/event3

当执行命令之后,移动鼠标或按下键盘,松开鼠标都会在终端打印相应的数据,如下图所示。如果没有打印信息,那么这个设备文件不是鼠标对应的文件,那么换一个设备文件测试。

阻塞I/O与非阻塞I/O之间的关系--知识点3_字节数

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include<fcntl.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
char buf[100];
int fd,ret;
//打开文件
fd=open("/dev/input/event3",O_RDONLY);
//读对应的文件
memset(buf,0,sizeof(buf));
ret = read(fd,buf,sizeof(buf)); //read具有阻塞功能,如果文件里面没有内容,将会被阻塞。有内 容才会输出
printf("成功读取<%d>个字节数据\n",ret); //移动鼠标会读出对应的字节数
//关闭文件
close(fd);
exit(0);
}