呼び出しを処理するためのデバイスドライバーモジュールと関連するユーザーライブラリを開発していioctl()
ます。ライブラリは関連情報を取得し、それを構造体に配置します。構造体はドライバーモジュールに渡され、そこで解凍されてから処理されます(多くの手順を省略していますが、それが全体的な考え方です)。
ioctl()
isuint32_t
タイプを介して構造体を介して渡されるデータの一部。<stdint.h>
そのタイプがANDで定義されていることを発見しました<linux/types.h>
。<linux/types.h>
これまで、ユーザーライブラリを含め、その値を定義するために使用してきました。しかし<linux/*.h>
、ユーザースペースでライブラリを使用するのは悪い形式であることを理解しているので、ライブラリを削除して<stdint.h>
代わりに使用する場合、ドライバモジュールに構造体定義が含まれている場合は、ライブラリ<stdint.h>
も含める必要があります。
<linux/types.h>
カーネルファイルで型を定義することがポイントだと思うので、それが使用<stdint.h>
が悪い考えであるかどうかはわかりません。また、ドライバーモジュールをでコンパイルしようとすると、のすべてのインスタンスをで置き換えても(そしてそれをインクルード順序の一番上に置いて<stdint.h>
も)消えない再定義に関するコンパイルエラーが発生することもわかりました。<linux/types.h>
<stdint.h>
- ユーザースペースコードにlinux/*。hインクルードを使用するのは悪い考えですか?
<stdint.h>
カーネル空間コードで使用するのは悪い考えですか?- 両方の答えが「はい」の場合、を含む構造が
uint32_t
ユーザーライブラリとドライバーモジュールの両方で共有されている状況をどのように処理しますか?