カーネル領域のerrno
に相当するものは何ですか?より正確には、たとえばkmalloc()
のような関数を使用するときにどのようなエラーが発生したかを確認するにはどうすればよいですか?カーネル領域のエラー処理/チェック
2
A
答えて
3
:あなたにはerrno
変数を設定するエラーのリストを見つけることができます。 Cユーザー空間プログラムとは異なり、関数はエラーコードをグローバル変数に格納せず、直接値を返します。あなたは一般的に次のようにこれが行われていることがわかります。エラーコードから離れて何も値を返さない
- 機能は、一般的に失敗したときに成功と
-ESOMETHING
時0
を返します。 - 負でない数値(インデックス、ファイルディスクリプタ番号、バイト数など)を返す関数は似ています.0以上は成功を示し、負の値はエラーを示します。
- ポインタを返す関数は、エラーを示すために特殊な範囲の値を返します。戻り値に
IS_ERR()
を呼び出すと、エラーが発生したかどうかを確認できます。PTR_ERR()
を使用すると、エラーコードを抽出して再度無効にすることができます。
残念ながら、kmalloc()
関数はこれらのスタイルを使用しません。障害発生時に特定のエラーコードを表示せずにNULL
を返します。
1
カーネル領域にerrno
がありません。あなただけのkmalloc()
のために例えばif文でカーネル関数のリターンを確認することができます:あなたはその後、ユーザ空間だけで中errno値になるかを決定することができ、あなたのエラーを処理
struct dog *ptr;
ptr = kmalloc(sizeof(struct dog), GFP_KERNEL);
if (!ptr)
/* handle error ... */
:
return -ErrorName;
Linuxカーネルは、この負の値をライブラリerrno.hで解釈します。 Linuxカーネルはエラー条件を処理するためのさまざまな方法をいくつか使用しています
include/asm-generic/errno.h
include/asm-generic/errno-base.h
関連する問題
- 1. AWSラムダクロス領域出力処理
- 2. カーネル密度領域を見つける
- 3. 領域BAD_ACCESSエラー
- 4. MarkLogicの物理ストレージ領域
- 5. 反応したネイティブ領域の画像の処理
- 6. splitcontainerコントロールのスプリッタ領域でイベントを処理する
- 7. Python数学領域のエラー
- 8. Python:ファイルパスから空き領域を処理する
- 9. sasで十分でないディスク領域を処理するソリューション
- 10. チェック領域は、ロードされたADF
- 11. MATLAB画像処理でマークされた領域の領域を見つけよう
- 12. Boxfuse AWSデフォルト領域エラー
- 13. 計算画面領域エラー
- 14. JPEG-LSの領域の理解
- 15. ワードプレスの管理領域にカスタムユーザのリスト
- 16. 接続された領域の領域
- 17. 再編成管理領域のワードプレスボックス
- 18. django + appエンジンの管理専用領域
- 19. Linuxカーネルのtcp処理後のパケット処理
- 20. asp.netコアの領域の剃刀で処理されていないタグ
- 21. MVC 4 Web APIの領域404エラー
- 22. Railsアプリケーションで管理領域を作成
- 23. クリック可能な領域の上にある要素を処理する方法
- 24. チェック並列処理
- 25. 別の領域
- 26. Excelエラー1004:領域とペースト領域が同じサイズではありません
- 27. カーブした領域でタッチイベントを検出/処理する方法は?
- 28. 私が実行する領域エラー
- 29. 特定の領域内の座標をチェックする方法
- 30. SQL Serverデータベースファイルの未使用領域のチェック
Ed!ありがとう! – LiorGolan
私は、 'kmalloc()'が与えられたサイズが0の場合に 'ZERO_SIZE_PTR'を返すこともできるということを付け加えておきます。' kmalloc() 'を呼び出す前にサイズを明示的にチェックして、' ZERO_SIZE_PTR 'また、 'PTR_RET()'(これは廃止予定)、 'IS_ERR()'、 'PTR_ERR()'の代わりに 'PTR_ERR_OR_ZERO()'を使うことを検討してください。 –
サイズが0のときにmallocから返されるNULL以外のコードが表示されるのに驚くかもしれません!だから、コードで注意してください。 @SamProtsenkoはすでに詳細を教えてくれました。 – 0andriy