Linux的阻塞和非阻塞IO
这里的IO不是指单片机的GPIO引脚,指的是Input/Output;
1.Linux的IO分为阻塞IO和非阻塞IO
1.1 阻塞式IO
当应用程序对设备驱动进行操作时,如果获取不到设备资源(设备不可用或数据未准备好),那么阻塞式IO就会将应用挂起,进入休眠态等待资源,直到获取到设备资源为止。
1.2 非阻塞式IO
当程序以非阻塞的方式读取设备数据时,在获取不到设备资源的情况下(设备不可用或数据未准备好),则不会进入休眠态,而是立刻向内核返回一个错误码,表示数据读取失败。应用程序会重新读取数据,循环读取直到数据读取成功。
1.3 应用示例
使用open()函数时,默认使用的是阻塞方式,如果需要用非阻塞方式则添加参数“O_NONBLOCK”。(应该是NoneBlock,没有阻塞的意思)
/* 应用程序阻塞读取数据 */
int fd;
int data = 0;
fd = open("/dev/xxx_dev",O_RDWR); /* 阻塞方式打开 */
fd = open("/dev/xxx_dev",O_RDWR|O_NONBLOCK); /* 非阻塞方式打开 */
ret = read(fd,&data,sizeof(data)); /* 读取数据 */
Linux的阻塞和非阻塞IO相关推荐
- linux函数的阻塞与非阻塞IO及错误处理
linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...
- Linux 阻塞和非阻塞IO 实验
目录 阻塞和非阻塞IO 阻塞和非阻塞简介 等待队列 轮询 Linux 驱动下的poll 操作函数 阻塞IO 实验 硬件原理图分析 实验程序编写 运行测试 非阻塞IO 实验 硬件原理图分析 实验程序编写 ...
- Linux IO - 同步,异步,阻塞,非阻塞
From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...
- Linux之阻塞与非阻塞IO
目录 一.阻塞与非阻塞IO简介 1.阻塞IO 2.非阻塞IO 二.应用程序阻塞与非阻塞 1.阻塞 2.查询(非阻塞) ①select ②poll ③epoll 三.驱动程序阻塞与非阻塞 1.等待队列( ...
- Linux 阻塞和非阻塞 IO 实验
目录 一.阻塞和非阻塞简介 1.IO 概念 2.阻塞与非阻塞 二.等待队列 1.等待队列头 2.等待队列项 3.将队列项添加/移除等待队列头 4.等待唤醒 5.等待事件 三.轮询 1.应用程序的非阻塞 ...
- Linux 阻塞和非阻塞 IO简介
Linux 阻塞和非阻塞 IO简介 阻塞和非阻塞简介 1.阻塞IO 2.非阻塞IO 阻塞和非阻塞简介 这里的 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出 ...
- linux驱动开发 - 10_阻塞和非阻塞 IO
文章目录 1 阻塞和非阻塞 IO 1.1 阻塞和非阻塞简介 1.2 等待队列 1.等待队列头 2.等待队列项 3.将队列项添加/移除等待队列头 4.等待唤醒 5.等待事件 1.3 Linux驱动下的p ...
- linux驱动学习笔记(三)阻塞与非阻塞IO
Linux驱动中阻塞与非阻塞IO 前言 阻塞 非阻塞 一.等待队列 1.等待队列头 2.等待队列 模板 二.轮询 模板 总结 前言 阻塞和非阻塞io是两种不同的设备访问方式. 阻塞 阻塞IO表示在执行 ...
- Linux驱动(六)设备驱动中的阻塞与非阻塞IO
我们在Linux学习(二十三)IO模型中了解了LINUX中IO模型,IO模型最简单的可以分为阻塞IO和非阻塞IO.并且学习了一个用如何使用阻塞操作和非阻塞操作.而应用层之所以能实现阻塞操作和非阻塞操作 ...
- 嵌入式Linux 阻塞和非阻塞 IO 驱动设备访问模式
阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式, 在编写驱动的时候一定要考虑到阻塞和非阻塞. 阻塞与非阻塞简介 阻塞操作是指在执行设备操作时, 若不能获得资源, 则挂起进程直 ...
最新文章
- Spring Boot 整合 Elastricsearch + LogStash + Kibana
- 两个多精度十进制数加法程序设计_Fortran程序设计基础
- Windows 7下面安装VMware、Windows XP
- ajax post 请求 一直提示 404 not found textStatus error
- VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在和平区成功举办
- Android 系统(47)Android.mk的用法和基础
- 「leetcode」131.分割回文串【回溯算法】详解!
- [WEB] 详解Ajax实现网页数据异步更新并实时自动刷新
- Python中迭代函数chain
- npm install生成的package-lock.json文件有什么作用?
- C++ #ifdef 和 #endif
- uni-app下载和使用
- css3实现简单的文字动画效果
- 错误码400原因总结
- YOLOv5/v7 更换骨干网络之 PP-LCNet
- Python基础 笔记(三) 标识符、输入输出函数
- Python爬虫实战项目案例——爬取微信朋友圈
- Android ImageButton(图片按钮)
- 使用spleeter分离音频文件中的伴奏和人声
- 2018 年上半年网络工程师考试上午真题