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


目录
相关文章
|
7月前
|
Java
如何理解网络阻塞 I/O:BIO
如何理解网络阻塞 I/O:BIO
101 3
|
缓存 安全 Java
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
101 0
|
26天前
|
安全 Java 开发者
Lock锁和AQS之间的关系与区别:基于第一原理的深入分析
【11月更文挑战第26天】在Java并发编程中,锁(Lock)和队列同步器(AbstractQueuedSynchronizer,简称AQS)是两个核心概念。它们为多线程环境下的同步和互斥提供了强大的支持。本文将从第一原理出发,深入探讨Lock锁和AQS之间的关系与区别,同时分析它们的相关概念、业务场景、历史背景、功能点以及底层原理,并使用Java代码进行模拟实现。
22 1
|
7月前
|
并行计算 Java Linux
工作2年,有些人竟然还不懂进程、线程、协程之间的关系!
我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。
52 0
|
并行计算 安全 Java
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
136 0
|
Linux 编译器 调度
【线程概念和线程控制】(一)
【线程概念和线程控制】(一)
130 0
|
存储
【线程概念和线程控制】(二)
【线程概念和线程控制】(二)
74 0
|
算法 安全 Java
探索多线程编程:线程的本质、状态和属性
探索多线程编程:线程的本质、状态和属性
|
消息中间件 存储 算法
多线程概念,常用接口与多进程之间的比较
多线程概念,常用接口与多进程之间的比较
89 0