file_operation_poll

poll机制 使用方法

使用非阻塞IO的应用程序通常会使用select和poll系统调用查询是否可对设备进行无阻塞的访问,这两个系统调用最终会引发设备驱动中poll函数被执行。

atomic_t介绍

atomic_t: 这是一个用于定义原子变量的类型。原子变量是一种特殊的变量,可以在多线程环境下安全地进行操作,而不需要使用锁来防止竞争条件。atomic_t 通常用于存储整数值,并且提供了一组原子操作函数来保证操作的原子性。

ATOMIC_INIT(0): 这是一个宏,用于初始化原子变量。在这种情况下,ATOMIC_INIT(0)gstSub1gMsgFlag 初始化为 0。原子变量的初始化通常需要使用这个宏,而不是直接赋值,因为这样可以保证初始化过程的线程安全性。

DECLARE_WAIT_QUEUE_HEAD介绍

用于在linux内核编程中声明和初始化等待队列(wait queue)头的宏。等待队列用于在某些条件满足之前让线程处于睡眠状态,并且在条件满足的时候唤醒他们。常用于阻塞式等待

1
2
3
4
DECLARE_WAIT_QUEUE_HEAD(msg_wait)
等价于
wait_queue_head_t msg_wait;
init_waitqueue_head(&msg_wait);
wake_up_interruptible介绍

用于唤醒等待队列中处于可中断睡眠状态的进程。进程被唤醒后,会从睡眠状态恢复并执行对应任务(.poll绑定函数)。

poll_wait(file, &msg_wait, wait);介绍

将当前进程mgs_wait添加到指定的等待队列中。

poll函数返回事件的状态。

image-20240812150319868