shmat サブルーチンによる共有メモリー・セグメントの作成

このセクションでは、shmat サブルーチンを使用して共有メモリー・セグメントを作成する方法について説明します。

前提となる作業または条件

なし。

手順

  1. 共有セグメントを固有識別するキーを作成する。 キーの作成には ftok サブルーチンを使用してください。 例えば、変数 proj (タイプ char) に入っているプロジェクト ID R およびファイル名 null_file を使用して mykey を作成するには、次のようなステートメントを使用します。
    mykey = ftok( null_file, proj );
  2. あるいは、
    • shmget サブルーチンによって 共有メモリー・セグメントを作成する。 例えば、4096 バイトが入った共有セグメントを作成し、shmid を 整変数 mem_id に割り当てるには、 次のようなステートメントを使用します。
      mem_id = shmget(mykey, 4096, IPC_CREAT | o666 );
    • shmget サブルーチンによって、 前に作成された共有セグメントを獲得する。 例えば、既にキー mykey に関連付けられている共有セグメント を獲得し、shmid を整変数 mem_id に 割り当てるには、次のようなステートメントを使用します。
      mem_id = shmget( mykey, 4096, IPC_ACCESS );
  3. shmat サブルーチンによって、 共有セグメントをプロセスに接続する。 例えば、前に作成されたセグメントを接続するには、 次のようなステートメントを使用します。
    ptr = shmat( mem_id );
    この例で、変数 ptr は、 共有セグメントのフィールドを定義する構造体を指すポインターです。 このテンプレート構造体は、 共有セグメント内のデータの保管および検索を行うときに使用します。 このテンプレートは、セグメントを使用するすべてのプロセスで同じでなければなりません。
  4. セグメント内のデータを、テンプレート構造体を用いて処理する。
  5. セグメントを、shmdt サブルーチンを用いて切り離す。
    
    shmdt( ptr );
  6. 共有セグメントが不要になったら、 shmctl サブルーチンによってシステムから除去する。
    
    shmctl( mem_id, IPC_RMID, ptr );

    注: セグメントに関する情報を 入手するには ipcs コマンド、 セグメントを除去するには ipcrm コマンドを使用することもできます。