0

宿題プロジェクトの一環として、共有メモリを使用してパイプを実装するライブラリを実装する必要がありました。匿名パイプと名前付きパイプの両方。

私は実装を選択しましたPosix。つまり、次の呼び出しを使用しました。

mmap()
shm_open()
ftruncate()
shm_unlink()

For semaphores and synchronization 

sem_init()
sem_getvalue()
sem_wait()
sem_post()

(1つか2つの呼び出しを忘れるかもしれません)

私のTAは、そのライブラリをSystem Vバージョンで実装することを好むと言いましたが、私は試験の最中なので、それを行う余分な時間はありません(少なくとも1週間かかると思います).

私の質問は次のとおりです。

  1. Posix で実装されているパイプと System-V で実装されているパイプの違いは何ですか?
  2. Sys Vバージョンを使用して上記のライブラリを実装するには、どのような呼び出しが必要ですか?

ありがとう

4

1 に答える 1

1

質問 (1) に関してはPosix、パイプの実装とパイプの実装の間に違いはないはずSystem Vです。一連のルーチンを使用してライブラリを実装している場合、ユーザーは 2 つの違いに気付かないはずです。実装。

開発者が使用する共有メモリ呼び出しは、System V作成shmgetshmatてアクセスしshmctl、破棄します (shmdt現在のプロセスから共有メモリ セグメントをアンマップするために使用されます)。

ftokファイル名を使用するキーに変換する呼び出しを使用します。

キーは、異なる共有メモリ/セマフォ項目を区別する魔法の一意化項目であることに注意してください。

セマフォを取得するには を使用semgetし、ロックとロック解除には を使用semopし、それを破棄するには を使用しますsemctl

System V のセマフォと共有メモリ セグメントは、プログラムの実行後も存続できます。つまり、プログラムがそれらを破棄せずに終了した場合、それらは、プログラムによって、またはipcrm

于 2012-07-25T13:31:12.893 に答える