Linux驱动之阻塞与非阻塞

简介:
阻塞和非阻塞 取决与open传入的参数


open("/dev/buttons", O_RDWR );阻塞 会陷入休眠

open("/dev/buttons", O_RDWR | O_NONBLOCK);非阻塞(立即返回一个数)


驱动open
static DECLARE_MUTEX(button_lock);     //定义互斥锁
if (file->f_flags & O_NONBLOCK)
{//非阻塞
if (down_trylock(&button_lock))
return -EBUSY;
}
else
{//阻塞
/* 获取信号量 */
down(&button_lock);
}


驱动read

if (file->f_flags & O_NONBLOCK)
{//非阻塞
if (!ev_press)
return -EAGAIN;
}
else
{//阻塞
/* 如果没有按键动作, 休眠 */
wait_event_interruptible(button_waitq, ev_press);

}


目录
相关文章
|
4月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
49 6
|
4月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
52 5
|
4月前
|
Ubuntu NoSQL Linux
Linux内核和驱动
Linux内核和驱动
31 2
|
4月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
5月前
|
存储 JSON Linux
|
5月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
159 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
3月前
|
Linux API
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
|
4月前
|
Linux 开发者
深入理解Linux I/O模型:同步、异步、阻塞与非阻塞
【8月更文挑战第1天】在探索操作系统的奥秘中,I/O模型作为影响性能的关键因素之一,常常让开发者们感到困惑。本文将通过浅显易懂的语言和实际代码示例,揭示Linux下同步与异步、阻塞与非阻塞的概念及其区别,并指导如何在实际应用中选择合适的I/O模型以优化程序性能。
145 1
|
4月前
|
Linux
【linux】【驱动】<specifier>-map-pass-thru讲解
【linux】【驱动】<specifier>-map-pass-thru讲解
23 0
|
4月前
|
Linux
【linux】【驱动】phy接口类型
【linux】【驱动】phy接口类型
19 0