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

简介: 阻塞I/O与非阻塞I/O之间的关系--知识点3

第一:利用阻塞式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  


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

20210918210604951.png

#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);
}


目录
相关文章
|
2月前
|
Java
如何理解网络阻塞 I/O:BIO
如何理解网络阻塞 I/O:BIO
|
6月前
|
缓存 安全 Java
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
|
2月前
|
并行计算 Java Linux
工作2年,有些人竟然还不懂进程、线程、协程之间的关系!
我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。
26 0
|
6月前
|
并行计算 安全 Java
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
|
Java 调度
35. 谈谈你对Java线程之间通信方式的理解
35. 谈谈你对Java线程之间通信方式的理解
48 0
|
物联网 Linux 开发者
信号阻塞集的概念|学习笔记
快速学习信号阻塞集的概念
86 0
|
Java 调度 容器
【多线程学习笔记5】线程之间的通信
【多线程学习笔记5】线程之间的通信
Java线程同步的一些例子
Java线程同步的一些例子
101 0
Java线程同步的一些例子
|
算法 安全
非阻塞同步算法实战(三)-LatestResultsProvider
阅读本文前,需要读者对happens-before比较熟悉,了解非阻塞同步的一些基本概念。本文主要为happens-before法则的灵活运用,和一些解决问题的小技巧,分析问题的方式。
135 0
非阻塞同步算法实战(三)-LatestResultsProvider

相关实验场景

更多