蜗牛哒哒

LINUX教程-LINUX编程-阻塞型字符驱动

作者: 蜗牛哒哒 发布时间: 2020-12-20 154 人阅读

功能
Q:前面我们跳过了一个重要的问题:当一个驱动无法立刻满足请求时应当如何处理? 例如:调用read时没有数据可读, 但以后可能会有;或者一个进程试图写设备,但是设备暂时没有准备好接收数据。应用程序通常不关心这种问题,应用程序只是调用 read 或 write 并得到返回值。
A:驱动程序应当(缺省地)阻塞进程,使它进入睡眠,直到请求可以得到满足。
阻塞操作
在阻塞型驱动程序中,Read实现方式如下:
如果进程调用read,但没有数据或数据不足,进程阻塞。当数据到达时,进程被唤醒,并将数据返回给调用者。
在阻塞型驱动程序中,Write实现方式如下:

非阻塞操作

如果进程调用了write,但设备没有足够缓冲区,进程阻塞。当数据被读出设备后,缓冲区中空出部分空间,则唤醒进程。
阻塞是文件读写操作的默认选择,但应用程序员可人为设置读写操作为非阻塞方式,通过设置O_NONBLOCK标志,该标志定义在<linux/fcntl.h>中,在打开文件时指定。
如果设置了O_NONBLOCK标志,read和write的行为是不同的。如果进程在没有数据就绪时调用了read,或者在缓冲区没有空间时调用了write,系统只是简单地返回
-EAGAIN。

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.本站所有资源不保证完整性,仅供参考学习!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
8. 如遇到加密压缩包,默认解压密码为"woniudada",如遇到无法解压的请联系管理员处理!
蜗牛哒哒 » LINUX教程-LINUX编程-阻塞型字符驱动