7

mmap(2)との違いを知っている人はいmmap(3)ますか?Manセクション3は、「この章では、システムコールを実装する第2章で説明したライブラリ関数を除くすべてのライブラリ関数について説明します」と説明されています。mmap(3)システムコールを実行しませんか?

2つのマニュアルページを読むと、それmmap(2)は実際よりもはるかに幅広い種類のフラグを受け入れているようでmmap(3)あり、デバイスのI/Oスペースをマッピングできると主張しています。 mmap(3)「共有メモリオブジェクト」と「型付きメモリオブジェクト」をファイルに追加してマップできると主張していますが、デバイスI/Oについては言及していません。

2つの関数の名前が同じであるため、どちらを選択するかさえわかりません。

4

1 に答える 1

18

mmap(3)POSIX関数であると想定されています。Linuxが「ネイティブに」行うことから逸脱している場合でも、すべての点でPOSIXが要求するセマンティクスを提供する必要があります。mmap(2)はシステムコールであり、Linusが重要と見なすすべてのベルとホイッスルを提供します。もちろん、Cライブラリ関数はシステムコールを使用して実装されます。

システムコールを文字通り(Cライブラリをバイパスして)呼び出すには、を使用できます<sys/syscall.h>

mmap(3)の実際の実装は、Cライブラリにあります。ご覧のとおり、コンパイル時に(glibcの)mmap2(2)が「バックエンド」として選択されていない限り、通常は制御をmmap(2)に直接転送します。

于 2009-08-30T17:15:37.640 に答える