Linux CUSE驱动:如何实现阻塞与非阻塞操作?
在Linux环境下使用CUSE实现用户态字符设备的阻塞读问题
背景
我需要在Linux环境下基于CUSE实现一个用户态字符设备。在内核态字符设备驱动中,.read函数需要根据文件描述符的O_NONBLOCK标志状态,分别实现阻塞或非阻塞的读操作。但当CUSE驱动的.read函数暂无数据可读时,我不清楚该如何处理。
核心疑问
- CUSE驱动的
.read函数是否需要自行根据O_NONBLOCK标志的状态,分别实现阻塞与非阻塞两种行为? - 如何在CUSE驱动的
.read函数中正确实现阻塞读操作?
尝试与问题
我曾在.read函数内部用sleep(1)做阻塞逻辑的原型测试,虽然功能勉强可用,但发现CUSE驱动对.write操作的响应变得异常缓慢。由此我判断CUSE的.read函数不应该直接进行长时间阻塞,但目前在CUSE的官方文档、示例代码及相关开源项目中,都找不到正确的阻塞读实现方案。我已在libfuse的代码仓库提交了相关Issue,请求补充阻塞/非阻塞读写的文档与示例。
内容的提问来源于stack exchange,提问作者Craig McQueen
相关产品推荐
相关产品推荐

