デバイスドライバが非同期書き込みを実装していない場合はどうなりますか?

デバイスドライバが非同期書き込みを実装していない場合はどうなりますか?

ssize_t(*read)(struct file*, char __user*, size_t, loff_t*);

デバイスからデータを取得するために使用されます。この位置にNULLポインタがあると、読み取りシステム呼び出しは-EINVAL(「無効な引数」)で失敗します。負以外の戻り値は、正常に読み取られたバイト数を示します。戻り値は「符号付きサイズ」型で、通常はターゲットプラットフォームのデフォルトの整数型です。

ssize_t(* aio_read)(struct kiocb *、char __user *、size_t、loff_t);

非同期読み取り(関数が返される前に完了しない可能性がある読み取り操作)を開始します。このメソッドがNULLの場合、すべての操作は読み取り(同期的に)として扱われます。

ssize_t(*write)(struct file*, const char __user*, size_t, loff_t*);

デバイスにデータを送信します。 NULLの場合、書き込みシステムコールを呼び出したプログラムに-EINVALが返されます。負でない場合、戻り値は正常に書き込まれたバイト数を示します。

ssize_t (*aio_write)(struct kiocb *, const char __user *, size_t, loff_t *);

デバイスで非同期書き込み操作を開始します。

LDD3でこの説明を使用して、デバイスドライバが非同期書き込み機能を実装していない場合に何が起こるのかを説明できる人はいますか?非同期読み取りと同様に、自動同期(NULLの場合)に昇格されます。

ベストアンサー1

の項目はaio_read廃止されました。aio_writefile_operationsread_iter、(同じではありませんが)およびに置き換えられましたwrite_iter。書き込み可能エントリには、および/または少なくとも1file_operationsつが必要です。VFSはwritewrite_iter利用可能なものを使用してください。。 (事前の可用性を確認して文書化するために使用してくださいFMODE_CAN_WRITE。)

aio_writeそれ自体が本当に必要でwrite_iter-EINVALない場合の返品。持つ一般的な実装available はさまざまな状況で使用できますが、代替手段として自動的には使用されません。

おすすめ記事