私は Android で自己コーディングしたカーネル モジュールを持っていO_RDONLY|O_NONBLOCKます。
O_NONBLOCK2048ユーザープログラムとカーネルモジュールの両方にあります。
私はそれをチェックしました
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わけではありません。1O_WRONLY
誰でもアイデアや説明はありますか?
編集:
beeingも期待していませんが、完全に間違っています。catO_NONBLOCKO_WRONLY
私はこのように開きます:
pcm->dfd=open(fname, O_RDONLY|O_NONBLOCK);
そして、それはfcntl後でありません(そして、それはまったく影響しないはずです。しかし、もちろん、運がなければmy_open「リセット」も試みました。O_NONBLOCKfcntl