阻塞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);
}


目录
相关文章
|
存储
汇编语言中“$”的作用
汇编语言中“$”的作用
2295 0
汇编语言中“$”的作用
|
Java 编译器
【Java基础面试三十】、 两个字符串相加的底层是如何实现的?
这篇文章解释了Java中两个字符串相加的底层实现:对于字符串直接量的拼接,编译器在编译时会进行优化合并;而对于包含变量的字符串拼接,编译器会采用`StringBuilder`进行优化,自动创建实例并调用`append()`方法来拼接字符串。
|
设计模式 开发框架 前端开发
实践总结|前端架构设计的一点考究(下)
作者将【DDD、六边形、洋葱、清洁、CQRS】进行深入学习并梳理总结的一个前端架构设计,并且经历一定应用实践的考验。
372 0
|
Java 数据库
BigDecimal的精度与刻度
【8月更文挑战第4天】`BigDecimal` 类在 Java 中用于高精度十进制数运算,能精确控制数值的精度(有效数字位数)和刻度(小数点后位数)。例如 `new BigDecimal(&quot;123.45&quot;)`,精度为 5,刻度为 2。通过设置精度和刻度可进行精确计算与格式化输出。进行金额计算时常用 `BigDecimal` 保证准确性,如计算总价 `price.multiply(quantity)`。从数据库获取数值需展示时,可用`dbValue.setScale(2,BigDecimal.ROUND_DOWN)` 保留两位小数。
224 4
|
监控 Kubernetes 安全
Istio整体架构解析
【7月更文挑战第17天】Istio整体架构分为数据平面(Data Plane)和控制平面(Control Plane)两部分
|
Java
Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx()V
Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx()V
128 0
|
SQL 存储 缓存
ORACLE常用性能监控SQL【二】(下)
ORACLE常用性能监控SQL【二】(下)
657 0
|
XML JSON 前端开发
Qt委托代理机制之《Model/View/Delegate使用方法》
Qt委托代理机制之《Model/View/Delegate使用方法》
888 1
|
Java 开发工具 数据安全/隐私保护
Spring Cloud中的分布式配置管理最佳实践
Spring Cloud中的分布式配置管理最佳实践
|
开发框架 Java API
Spring Boot与Flowable的完美整合
【4月更文挑战第20天】
3844 2