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

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

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

ありません。

PROCEDURE

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

    注: ipcs コマンドを使用してセグメントに関する情報を取得したり、 ipcrm コマンドを使用してセグメントを削除したりすることもできます。