8

Linuxで間接的なシステムコールを可能にするsyscallがあります。それを使用する理由は何ですか?関数を直接呼び出すよりも優れているのはなぜですか?

4

1 に答える 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 に答える