Linuxで間接的なシステムコールを可能にするsyscallがあります。それを使用する理由は何ですか?関数を直接呼び出すよりも優れているのはなぜですか?
質問する
1280 次
1 に答える
11
カーネルがシステムコールを追加し、Cライブラリがそれらをサポートするのに時間がかかる場合があります。
または、古いLinuxディストリビューションでコンパイルしているが、新しいディストリビューションで実行したい場合もあります。
コード例:
// syscall 277 is sync_file_range() on x86_64 Linux. The header
// files lack it on scc-suse10 where we compile, but the
// performance benefits are substantial, so we just call it
// directly. FIXME someday.
#define SYNC_FILE_RANGE_WRITE 2
syscall(277, fd, done, n, SYNC_FILE_RANGE_WRITE);
ただし、一般に、syscall
コンパイル環境のCライブラリに必要なものがある場合に使用する利点はありません。(1つには、システムコール番号はCPUによって異なるため、Linux固有のインターフェイスを使用するよりも移植性が低くなります。)
于 2012-09-05T16:44:40.833 に答える