【注意】共有メモリ(SHM)

まず、特性

  共有メモリは、異なるプロセスの数が同じメモリにアクセスすることができますことができます。IPC他の形態の、高速、高効率特性と比較して、大規模なデータ処理消費メモリ共有メモリに減少します。

第二に、共有メモリを作成します

  1、ヘッダファイル

    書式#include <sysの/ ipc.h>

    書式#include <sysの/ shm.h>

    書式#include <SYS / types.h>に

  2、機能

    ftok key_tの(パス名のconst char型*、INT PROJ_ID);   IPC通信を作成するために必要なID値。

      パス名:現在のディレクトリは、通常、既存のファイル名を指定します。

      PROJ_ID:シーケンス番号、サイズ1〜255。

      戻り値:ID、サイズの値をiノード番号を加えたシーケンス番号の前に、例えば:パス名のiノード番号は0x101010で、PROJ_IDが0x32の場合、IDは0x32101010です。

    INTたshmget(key_tのキー、size_tのサイズ  、int型shmflg);  共有メモリを作成したり、開い

      キー:識別子は、キーに対応する各IPCオブジェクトは、サイズが0の整数ではありません

      サイズ:共有メモリ容量を指定します。

      shmflg:許可フラグ、および類似のオープン関数のパラメータのモード。メモリキー識別子が存在しない場合はIPC_CREAT、それが作成されます。IPC_EXCL、メモリがある場合、キー識別子は、その後、errnoがEEXISTエラーです。

      戻り値:共有メモリ識別子の成功のリターンは、返すことができなかった-1。

    void *型にshmat(int型のshmidを、CONST  void *型は、shmaddr、INT shmflg);  共有メモリオブジェクトは、呼び出し元プロセスのアドレス空間にマッピングされています

      shmidを:共有メモリ識別子。

      shmaddr:システムは、共有メモリアドレスを選択したことを示す、NULLとすることができる、現在のプロセスのアドレス位置に接続された共有メモリを指定

      shmflg:許可フラグは、SHM_RNDはSHM_RDONLY読み取り専用、読み取りおよび書き込み。

      戻り値:共有メモリの先頭アドレスを正常に復帰、返すために失敗-1。

      注意:子プロセスが共有メモリアドレスが接続されている継承のフォーク後。共有メモリアドレスを子プロセス幹部は、それが自動的にオフに接続された後(デタッチ)。プロセスの終了後、共有メモリアドレスが自動的にオフに接続されている(デタッチ)

    int型にshmdt(定数ボイド*のは、shmaddr) 、   共有メモリとの関連プロセスをキャンセルします。

      shmaddr:最初のアドレスの共有メモリ。

      戻り値:成功した場合に0を返し失敗すると-1を。

      注意:にshmdtは、共有メモリが、別の共有メモリと現在のプロセスを削除しません。

    INT shmctl(INT shmidを、INT CMD 、構造体するshmid_ds * BUF);    操作共有メモリ

      shmidを:共有メモリ識別子。

      CMD:IPC_STAT、共有メモリの状態を取得するために、設定するshmid_ds BUFの共有メモリコピー。IPC_SETに、共有メモリの状態を変化させる、共有メモリ構造にUID、GID、モードするshmid_dsで言及構造BUFするshmid_dsをコピーします。IPC_RMIDは、このロゴは、共有メモリを削除します。

      BUF:共有メモリー管理構造

構造体するshmid_ds {
     構造体するipc_perm shm_perm。    / * 所有権と許可* / 
    size_tのshm_segszに。   / * セグメントのサイズ(バイト)* / 
    のtime_t shm_atimeに。   / * 前回添付* / 
    time_t型shm_dtimeにします。   / * 最後のデタッチ時間* / 
    time_t型のshm_ctime。   / * 最後に変更が行われた時刻* / 
    pid_t shm_cpid。    / * 作成者のPID * / 
    pid_t shm_lpidに。    / * 最後にshmatのPID(2)/にshmdt(2)* /
    shmatt_t shm_nattchを;  / * 現在の米国特許は、添付します* / 
    ... 
}。

構造体するipc_perm { 
    key_tの__key。    / * (2)たshmgetに供給キー* / 
    uid_t型UIDを。      / * 所有者の実効UID * / 
    gid_tのgidの。      / * 所有者の実効GID * / 
    uid_t型のCUID。     / * 作成者の実効UID * / 
    gid_tののcgid。     / * 作成者の実効GID * / 
    符号なしのショートモード。     / *アクセス権+ SHM_DESTと
                                SHM_LOCKEDフラグ* / 
    符号なしの短い __seq。    / * シーケンス番号* / 
}。

      注意:IPC_RMIDは唯一の共有メモリは削除対象としてマーク。共有メモリは、現在のプロセスに接続されている場合、それを削除します。他のプロセスがある場合、それは現在のプロセス接続から削除され、0にメモリ識別子を共有し、他のプロセスを予防して、共有メモリを接続することPRIVATE状態であることを示し、他のプロセスが切断するために共有メモリを取り外した後、お待ちしております。

共有メモリのステータスを確認します。IPCSコマンド

おすすめ

転載: www.cnblogs.com/qiu00/p/11621225.html