6

カーネル 2.5.8 以降を必要とする sched_setaffinity を使用するコードを書いています。これらのことが可能かどうかを調べようとしています:

  1. これを適切にコンパイルするための古いカーネルを備えたシステムでは、おそらくそのコード セグメントを完全に無視します。
  2. 古いカーネルを持っている人にコンパイル済みのバイナリを送ると、この関数をステップオーバーするか、単に警告を表示します。

私の質問は、古いシステムを使用しているときにアプリケーション全体を壊すことなく、新しいカーネル機能を安全に使用するにはどうすればよいかということだと思います。

4

2 に答える 2

3

ファイル名として使用dlopen()し、使用する機能を使用します。成功した場合は、返された関数ポインタを介して関数を呼び出します。NULLdlsym()dlsym()

于 2012-05-23T21:43:40.003 に答える
2

プログラムをリンクまたは実行しようとしていますか? syscall()最近の C ライブラリを必要とせずに、glibc 関数を介してシステム コールを直接呼び出すことができます。サポートされていない以前のシステムでは明らかに失敗します (簡単なテストでは、カーネルが実装されていないシステムコール番号に対して -1 == ENOSYS を返すことを示しています)。そのため、それをテストする必要があります。

于 2012-05-23T22:47:13.457 に答える