4
我在我的C程序中打开一个文件:打开文件O_NONBLOCKING丢失内核模块
pcm->dfd = open(fname, O_RDONLY|O_NONBLOCK);
,过一会儿给它select()
和read()
。
但我的问题是,该O_NONBLOCK
被somewere丢失:
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()
somewere人,但没有..
编辑2:
有可能的是,O_NONBLOCK
在我的用户程序(的Android NDK)的其他值不是内核?我在内核头文件中搜索了O_NONBLOCK
,并且已经有2个不同的定义。
我还检查open
- 实施我的内核模块,并且已经有filp->f_flags
是不O_NONBLOCK
。
显示我们执行'read'的代码。 – cnicutar
增加了'read'-line。与UB'O_NONBLOCK'结果(也称为_unspecified behaviour_),按照[规格] –
打开文件(http://pubs.opengroup.org/onlinepubs/000095399/functions/open.html)。 –