首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开的文件O_NONBLOCKING在内核模块中丢失

打开的文件O_NONBLOCKING在内核模块中丢失
EN

Stack Overflow用户
提问于 2012-07-04 20:59:14
回答 1查看 1.4K关注 0票数 4

我正在我的C程序中打开一个文件:

代码语言:javascript
复制
pcm->dfd = open(fname, O_RDONLY|O_NONBLOCK);

然后打电话给select()read()

但我的问题是,O_NONBLOCK迷路了

代码语言:javascript
复制
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      
    }
    ..
}

我也试过

代码语言:javascript
复制
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);

这不是日志问题,驱动程序也在阻塞模式下工作.

有什么主意吗?

编辑:

从打开的文件读取的代码非常简单:

代码语言:javascript
复制
size=read(pcm->dfd,inBuffer,inBufferBytes);

我还检查了程序是否还有fcntl(),但没有.

编辑2:

难道O_NONBLOCK在我的用户程序(Android )中比内核中还有其他价值吗?我在内核头中搜索O_NONBLOCK,已经有两个不同的定义了。

我还在内核模块中检查了open-implementation,filp->f_flags而不是 O_NONBLOCK

EN

回答 1

Stack Overflow用户

发布于 2012-10-19 16:15:04

根据打开(2)手册的说法,传递O_NONBLOCK只会使open调用本身成为非阻塞的(您可能不希望如此)。这并不意味着打开的文件描述符也将处于非阻塞模式--必须在打开后使用fcntl()设置该模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11335398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档