我在我的 C 程序中打开一个文件:
pcm->dfd = open(fname, O_RDONLY|O_NONBLOCK);
后来打电话select()
就read()
可以了。
但我的问题是,O_NONBLOCK
迷路了:
ssize_t my_read(struct file *filp, char __user *user_buffer, size_t bytes_requested, loff_t *capture_ptr) {
if (filp->f_flags & O_NONBLOCK){
LOGI("mode: O_NONBLOCK");
}
else{
LOGI("mode: BLOCKING"); // <-- this is printed
}
..
}
我也试过
pcm->dfd=open(fname, O_RDONLY|O_NONBLOCK);
// O_NONBLOCK does not work :/
int flags = fcntl(pcm->dfd, F_GETFL, 0);
fcntl(pcm->dfd, F_SETFL, flags | O_NONBLOCK);
这不是日志记录问题,驱动程序的行为也与阻塞模式相同。
任何人的想法?
编辑:
从打开的文件中读取的代码非常简单:
size=read(pcm->dfd,inBuffer,inBufferBytes);
我还检查了程序是否有fcntl()
其他人,但没有..
编辑2:
有没有可能,O_NONBLOCK
我的用户程序(Android NDK)中的值比内核中的值不同?我O_NONBLOCK
在内核头文件中搜索,已经有 2 个不同的定义。
我还检查了open
内核模块中的 -implementation 并且filp->f_flags
已经没有 O_NONBLOCK
.