Linuxカーネルインターフェースの特定のタイプ

一般的に使用されるいくつかのカーネルのデータ型は、このように任意の移植性の問題を防止し、自分自身のtypedefの文を持っている。例えば、プロセス識別子(PID)は、多くの場合、int型の代わりにpid_t。Pid_tは、任意のタイプに実際のデータを用いてブロック異なった。我々は、特定のデータ構造へのインターフェイスを提供するようにインターフェイス固有の発現は、タイプ定義のライブラリを指す使用します。

 

なお、近い将来には、比較的少ない新しいインターフェイスがされて多くのカーネル開発者は好きではないているのtypedefステートメントを使用して、特定のタイプを定義してきた、彼らはむしろ、直接、ユーザー定義型の後ろに隠されていない実際のコードタイプ情報を参照してくださいね。インタフェースの多くの古い特定のタイプは、しかし、カーネル内に保持され、彼らはいつでもすぐに離れて行くされていません。

 

場合でもよう、正しいデータ型と一致するカーネルの他の部分の特定のインターフェイスタイプを定義しないことが重要であった。Aティックカウント、例えば、それは長いので、符号なし、実際のサイズとは無関係に、長い符号なしされていますちょっとの間を使用した場合のタイプは、常に使用する必要があります。私たちは_tの種類に焦点を当て、このセクションで。

 

多くの_tタイプがで定義されては<linux / types.h>に、列挙されていますが、特定のタイプを必要とするとき、あなたはあなたが呼び出し、またはであなたのデータを使用する必要がある関数のプロトタイプでそれを見つけることは稀に有用です構造。

 

あなたは、関数のこのドライブ「カスタム」タイプを使用する必要があり、慣例に従わないときはいつでも、コンパイラは警告を出し、あなたはすべての警告を削除慎重-Wallコンパイラフラグを使用している場合、あなたはあなたのコードがあるという確信を持つことができますポータブル。

 

あなたがそれらを印刷する必要がある場合、データ項目_t主な問題は、あなたを警告し、多くの場合、右のprintkやprintfのフォーマットを選択することは容易ではないシステム上で表示される別に再表示されます。たとえば、どのようにsize_t型を印刷するか、それいくつかの他のトップにunsigned int型である一方で、いくつかのプラットフォーム上で長い符号なしですか?

 

あなたが特定のデータ・インタフェースを印刷する必要があるたびに、最善の方法は、(多くの場合、長いまたはunsigned long型)可能な最大値の型を変換し、それを印刷することである。この調整は、対応する形式で生成されていませんこの拡張機能や変換は、より大きなデータ型への無操作やデータ項目であるため、エラーや警告は、フォーマットのマッチタイプので、あなたはデータビットを失うことはありません。

 

実際に、私たちはしばしば、あなたが印刷したくない項目の話をしているので、この問題は、デバッグ情報をに適用されます。多くの場合、コードは保存およびインターフェイスの特定のタイプを比較する必要があり、加えて、彼らは、ライブラリまたはカーネル関数の引数として渡されます。

 

_t型はほとんどの場合、適切なソリューションであり、時には正しい型にアクセスしていないが、これは、いくつかの古いインタフェースをクリーンアップされていない場合に発生します。

 

 

 

我々は、カーネルヘッダファイルに曖昧に緩く定義されているデータ・タイプI / O機能で使用されて見つかりました

 ルース主な理由は歴史的な理由の種類が、それは、このようなトラブルにあってもよいようOUTBパラメータを機能させるに交換などの書き込みコードの問題の時にそこに有していてもよい。port_tタイプがある場合、コンパイラはこのタイプがあります。

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11146085.html