4

キャラクターデバイスを作成するLinuxデバイスドライバーを作成しています。読み取り時に返されるデータは、論理的に 16 バイト単位に分割されます。

読み取りバッファーに収まるユニットの数を返すことで、この分割を実装することを計画していましたが、読み取りバッファーが小さすぎる場合 (<16 バイト) はどうすればよいかわかりません。

ここで何をすべきですか?または、私が表現しようとしている分割を達成するためのより良い方法はありますか?

4

1 に答える 1

5

データグラム ソケット デバイス ドライバーのように振る舞うことができます。常に 1 つのデータグラムだけを返します。読み取りバッファーが小さい場合、超過分は破棄されます。データグラム全体に十分なスペースを提供するのは呼び出し元の責任です (通常、アプリケーション プロトコルは最大データグラム サイズを指定します)。

デバイスのドキュメントでは、16 バイト単位で動作することが明記されている必要があるため、呼び出し元がこれよりも小さいバッファーを提供する理由はありません。したがって、上記の破棄によって失われたデータは、呼び出し元のアプリケーションのバグと見なすことができます。

ただし、呼び出し元が要求した場合、一度に 16 個以上を返すことも合理的です。これは、アプリケーションがそれ自体をユニットに分割することを示唆しています。これにより、システム コールが最小限に抑えられるため、パフォーマンスが向上する可能性があります。ただし、バッファーが 16 の倍数でない場合は、最後のユニットの残りを破棄できます。これが文書化されていることを確認してください。そうすれば、彼らはそれを倍数にすることを知っています.

のような一般的なアプリケーションについて心配している場合はcat、その必要はないと思います。単純にパフォーマンス上の理由から、非常に大きな入力バッファを使用することを期待しています。

于 2016-06-09T21:57:38.097 に答える