簡體   English   中英

打開文件O_NONBLOCKING在內核模塊中丟失

[英]open file O_NONBLOCKING gets lost in kernel module

我在我的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)中的其他值是否可能比在內核中有其他值? 我在kernel-headers中搜索了O_NONBLOCK ,並且已經有2個不同的定義。

我還檢查了我的內核模塊中的open -implementation,並且已經有filp->f_flags 不是 O_NONBLOCK

根據open(2)man-page ,傳遞O_NONBLOCK只會使open調用本身非阻塞(你可能不想要)。 這並不意味着打開的文件描述符也將處於非阻塞模式 - 您必須在打開后使用fcntl()進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM