gpt4 book ai didi

c - 打开文件 O_NONBLOCKING 在内核模块中丢失

转载 作者:太空狗 更新时间:2023-10-29 15:41:11 25 4
gpt4 key购买 nike

我正在我的 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-实现并且filp->f_flags 不是 O_NONBLOCK.

最佳答案

根据 open(2) man-page ,传递 O_NONBLOCK 只会使 open 调用本身是非阻塞的(您可能不想要)。这并不意味着打开的文件描述符也将处于非阻塞模式——您必须在打开后使用 fcntl() 对其进行设置。

关于c - 打开文件 O_NONBLOCKING 在内核模块中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com