阻塞IO与非阻塞IO简单程序书写的基本步骤总结

一、阻塞I/O

1、首先定义初始化队列头

  1)、静态定义初始化法:DECLARE_WAIT_QUEUE_HEAD(name) 这里定义了一个队列头并且初始化名为name

2)、动态定义+初始化:定义一个队列头wait_queue_head_t my_queue

初始化队列头 init_waitqueue_head(&my_queue);

2、将某个进程加入到等待队列中 进行休眠

如:wait_event(name,condtion) 将当前wait_event(name,condtion)所处于的进程加入到以name为队列头的等待队列中

3、当上一个(也就是2中提到的wait_event()所处于的进程)进程进入睡眠时,下一个进        程将进行操作。在此进程中要进行两步操作:

1)、将wait_event(name,condtion)中的condition设置为真,这样才能对2中提到的进程进行唤醒,

2)、wake_up(&name) 唤醒上一个进程


二、非阻塞I/O

1、以非阻塞的方式打开一个文件,返回文件描述符fd

2、FD_ZERO宏清除文件描述符集

     FD_SET宏向文件描述符集添加获得的文件描述符fd

3、使用select()系统调用查询是否可对设备进行无阻塞的访问

4、由于应用层调用系统调用select()函数,所以将引发设备驱动中的Poll()函数被执行

5、Poll()函数完成两步工作

1)、将可能引起设备文件状态变化的等待队列调用poll_wait(),将对应的等待队列添加到poll_table中

2)、返回表示能否对设备进行无阻塞读写访问的位掩码

6、驱动层返回位掩码,应用层通过FD_ISSET判断文件描述符为fd的文件在文件描述符集中是否置位,若置位表示可以操作


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值