私は Android で自己コーディングしたカーネル モジュールを持っていO_RDONLY|O_NONBLOCK
ます。
O_NONBLOCK
2048
ユーザープログラムとカーネルモジュールの両方にあります。
私はそれをチェックしました
print..("O_NONBLOCK is %d", O_NONBLOCK)
ユーザー空間とカーネル空間で。
しかし、今、O_NONBLOCK
設定されているかどうかを確認しようとすると、本当に奇妙な問題が発生しました。
static int my_open(struct inode *inode, struct file *filp) {
if (filp->f_flags & O_NONBLOCK) {
printk("O_NONBLOCK");
} else {
printk("NOT O_NONBLOCK");
printk("O_NONBLOCK in my_open is: %d", O_NONBLOCK); // -> prints 2048
printk("filp->f_flags in my_open is: %d", filp->f_flags); // -> prints 1, not 2048 or larger
}
..
}
私は何か他のことを試しました:
cat my_device
繰り返しになりますが、filp->f_flags
です1
。
私はおそらく0
のためにと思いますが、どちらが意味するO_RDONLY
わけではありません。1
O_WRONLY
誰でもアイデアや説明はありますか?
編集:
beeingも期待していませんが、完全に間違っています。cat
O_NONBLOCK
O_WRONLY
私はこのように開きます:
pcm->dfd=open(fname, O_RDONLY|O_NONBLOCK);
そして、それはfcntl
後でありません(そして、それはまったく影響しないはずです。しかし、もちろん、運がなければmy_open
「リセット」も試みました。O_NONBLOCK
fcntl