第一:利用阻塞式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
当执行命令之后,移动鼠标或按下键盘,松开鼠标都会在终端打印相应的数据,如下图所示。如果没有打印信息,那么这个设备文件不是鼠标对应的文件,那么换一个设备文件测试。
#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); }