这里的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相关推荐

  1. linux函数的阻塞与非阻塞IO及错误处理

    linux函数的阻塞与非阻塞IO及错误处理 1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2. ...

  2. Linux 阻塞和非阻塞IO 实验

    目录 阻塞和非阻塞IO 阻塞和非阻塞简介 等待队列 轮询 Linux 驱动下的poll 操作函数 阻塞IO 实验 硬件原理图分析 实验程序编写 运行测试 非阻塞IO 实验 硬件原理图分析 实验程序编写 ...

  3. Linux IO - 同步,异步,阻塞,非阻塞

    From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...

  4. Linux之阻塞与非阻塞IO

    目录 一.阻塞与非阻塞IO简介 1.阻塞IO 2.非阻塞IO 二.应用程序阻塞与非阻塞 1.阻塞 2.查询(非阻塞) ①select ②poll ③epoll 三.驱动程序阻塞与非阻塞 1.等待队列( ...

  5. Linux 阻塞和非阻塞 IO 实验

    目录 一.阻塞和非阻塞简介 1.IO 概念 2.阻塞与非阻塞 二.等待队列 1.等待队列头 2.等待队列项 3.将队列项添加/移除等待队列头 4.等待唤醒 5.等待事件 三.轮询 1.应用程序的非阻塞 ...

  6. Linux 阻塞和非阻塞 IO简介

    Linux 阻塞和非阻塞 IO简介 阻塞和非阻塞简介 1.阻塞IO 2.非阻塞IO 阻塞和非阻塞简介 这里的 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出 ...

  7. linux驱动开发 - 10_阻塞和非阻塞 IO

    文章目录 1 阻塞和非阻塞 IO 1.1 阻塞和非阻塞简介 1.2 等待队列 1.等待队列头 2.等待队列项 3.将队列项添加/移除等待队列头 4.等待唤醒 5.等待事件 1.3 Linux驱动下的p ...

  8. linux驱动学习笔记(三)阻塞与非阻塞IO

    Linux驱动中阻塞与非阻塞IO 前言 阻塞 非阻塞 一.等待队列 1.等待队列头 2.等待队列 模板 二.轮询 模板 总结 前言 阻塞和非阻塞io是两种不同的设备访问方式. 阻塞 阻塞IO表示在执行 ...

  9. Linux驱动(六)设备驱动中的阻塞与非阻塞IO

    我们在Linux学习(二十三)IO模型中了解了LINUX中IO模型,IO模型最简单的可以分为阻塞IO和非阻塞IO.并且学习了一个用如何使用阻塞操作和非阻塞操作.而应用层之所以能实现阻塞操作和非阻塞操作 ...

  10. 嵌入式Linux 阻塞和非阻塞 IO 驱动设备访问模式

    阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式, 在编写驱动的时候一定要考虑到阻塞和非阻塞. 阻塞与非阻塞简介 阻塞操作是指在执行设备操作时, 若不能获得资源, 则挂起进程直 ...

最新文章

  1. Spring Boot 整合 Elastricsearch + LogStash + Kibana
  2. 两个多精度十进制数加法程序设计_Fortran程序设计基础
  3. Windows 7下面安装VMware、Windows XP
  4. ajax post 请求 一直提示 404 not found textStatus error
  5. VRAR产业峰会暨第二届华为VR开发应用大赛颁奖典礼在和平区成功举办
  6. Android 系统(47)Android.mk的用法和基础
  7. 「leetcode」131.分割回文串【回溯算法】详解!
  8. [WEB] 详解Ajax实现网页数据异步更新并实时自动刷新
  9. Python中迭代函数chain
  10. npm install生成的package-lock.json文件有什么作用?
  11. C++ #ifdef 和 #endif
  12. uni-app下载和使用
  13. css3实现简单的文字动画效果
  14. 错误码400原因总结
  15. YOLOv5/v7 更换骨干网络之 PP-LCNet
  16. Python基础 笔记(三) 标识符、输入输出函数
  17. Python爬虫实战项目案例——爬取微信朋友圈
  18. Android ImageButton(图片按钮)
  19. 使用spleeter分离音频文件中的伴奏和人声
  20. 2018 年上半年网络工程师考试上午真题

热门文章

  1. 列表变成向量 列表变向量 list vector
  2. python实现杨辉三角_如何用Python实现杨辉三角和心
  3. c语言如何用三目运算符求出三个数中最大的数?直接看图
  4. 大话备考之数据结构选择题
  5. 游戏建模,游戏原画,游戏特效,哪个前景好?
  6. gearman php扩展 windows,在Debian 6上安装Gearman PHP扩展
  7. transport connector和network connector
  8. 2021中国企业数字转型指数 附下载
  9. 腾讯微云linux版本,qq linux版本下载
  10. 《SOA 原理•方法•实践》作者毛新生先生签名售书活动