名前


svipc - System V プロセス間通信機構

書式


# include <sys/types.h> # include <sys/ipc.h> # include <sys/msg.h> # include <sys/sem.h> # include <sys/shm.h>

説明


このマニュアル・ページは System V プロセス間通信機構の Linux に おける実装を説明する。 このプロセス間通信機構(interprocess communication mechanism)には、 メッセージ・キュー(message queue)、セマフォー集合(semaphore set)、 共有メモリ・セグメント(shared memory segment)などがある。以下で 資源(resource) という用語を使用した場合にはこれらの機構のどれかを意味する。

資源へのアクセス許可

システムのそれぞれの資源は、ipc への操作を許可するかどうかを決定する ための情報を共通の構造体 struct ipc_perm に格納して使用する。 ipc_perm 構造体は、ヘッダーファイルの <sys/ipc.h> に定義されており、以下のメンバーが含まれている:

        uid_t cuid;      /* 作成者のユーザーID */         gid_t cgid;      /* 作成者のグループID */         uid_t uid;       /* 所有者のユーザーID */         gid_t gid;       /* 所有者のグループID */         ushort mode;     /* 読み書きの許可 */

ipc_perm 構造体の mode メンバーは以下の 9 ビットで、プロセスの ipc システム・コール による資源へのアクセス許可を定義する。 許可は以下のように解釈される:

        0400    ユーザーによる読み込み。         0200    ユーザーによる書き込み。

        0040    グループによる読み込み。         0020    グループによる書き込み。

        0004    他人による読み込み。         0002    他人による書き込み。

システムはビット 0100, 0010, 0001 (実行ビット) は使用しない。 さらに、セマフォーの場合には "書き込み(write)" は実際には "変更(alter)" を意味する。

同じヘッダーファイルには以下のシンボルの定義が含まれている:
IPC_CREAT キー(key)が存在しない場合には新たなエントリを作成する。
IPC_EXCL キー(key)が存在する場合には失敗する。
IPC_NOWAIT 要求が待たされる場合にはエラーになる。
IPC_PRIVATE プライベート・キー。
IPC_RMID 資源を削除する。
IPC_SET 資源にオプションを設定する。
IPC_STAT 資源のオプションを取得する。
IPC_PRIVATEkey_t 型である。その他の全てのシンボルはフラグ・フィールドとして int 変数に OR 演算で格納することができる。

メッセージ・キュー

メッセージ・キューは正の整数 (msqid) によって識別され、 <sys/msg.h> に定義されている構造体 struct msqid_ds に結びつけられている。 この構造体は以下のメンバーを含んでいる:

        struct ipc_perm msg_perm;         msgqnum_t msg_qnum;      /* キューにあるメッセージの数 */         msglen_t msg_qbytes;     /* キューの最大バイト数 */         pid_t msg_lspid;         /* 最後に msgsnd(2) をした PID */         pid_t msg_lrpid;         /* 最後に msgrcv(2) をした PID */         time_t msg_stime;        /* 最後に msgsnd(2) をした時間 */         time_t msg_rtime;        /* 最後に msgrcv(2) をした時間 */         time_t msg_ctime;        /* 最後に変更された時間 */
msg_perm メッセージ・キューへのアクセス許可を指定する ipc_perm 構造体。
msg_qnum 現在、このメッセージ・キューにあるメッセージの数。
msg_qbytes メッセージ・キューに入れることができるメッセージの最大バイト数。
msg_lspid 最後に msgsnd(2) システム・コールを行なったプロセスの ID。
msg_lrpid 最後に msgrcv(2) システム・コールを行なったプロセスの ID。
msg_stime 最後に msgsnd(2) システム・コールを行なった時間。 msg_rtime 最後に msgcv(2) を行なった時間。
msg_ctime 最後に msqid_ds 構造体のメンバーが変更された時間。

セマフォー集合

セマフォー集合は正の整数 (semid) によって識別され、 <sys/sem.h> に定義されている構造体 struct semid_ds に結びつけられている。 この構造体は以下のメンバーを含んでいる:

        struct ipc_perm sem_perm;         time_t sem_otime;        /* 最後に操作した時間 */         time_t sem_ctime;        /* 最後に変更した時間 */         ulong sem_nsems;         /* 集合の中にあるセマフォー数 */
sem_perm セマフォー集合へのアクセス許可を指定する ipc_perm 構造体。
sem_otime 最後に semop(2) システム・コールを行なった時間。
sem_ctime 最後に semctl(2) を行なって上記の構造体のメンバーを変更するか、セマフォー集合に属する セマフォーを変更した時間。
sem_nsems セマフォー集合の中にあるセマフォーの数。 集合の中にあるそれぞれのセマフォーは負でない整数によって参照され、 0 から sem_nsems-1 までの番号を持つ。
セマフォーは struct sem 型のデータ構造体であり、以下のメンバーを含んでいる:

        int semval;      /* セマフォーの値 */         int sempid;      /* 最後に操作したプロセス ID */

semval セマフォー値: 負でない整数。
sempid このセマフォーを最後に操作したプロセスの ID。

共有メモリ・セグメント

共有メモリ・セグメトは正の整数 (shmid) によって識別され、 <sys/shm.h> に定義されている struct shmid_ds 構造体に結びつけられている。 この構造体は以下のメンバーを含んでいる:

        struct ipc_perm shm_perm;         size_t shm_segsz;        /* セグメントのサイズ */         pid_t shm_cpid;  /* 作成者のプロセス ID */         pid_t shm_lpid;  /* 最後に操作したプロセス ID */         shmatt_t shm_nattch;     /* 現在、付加している数 */         time_t shm_atime;        /* 最後に付加した時間 */         time_t shm_dtime;        /* 最後に分離した時間 */         time_t shm_ctime;        /* 最後に変更した時間 */
shm_perm 共有メモリ・セグメントへのアクセス許可を指定した ipc_perm 構造体。
shm_segsz 共有メモリ・セグメントのバイト数。
shm_cpid 共有メモリ・セグメントを作成したプロセスの ID。
shm_lpid 最後に shmat(2) または shmdt(2) システム・コールを実行したプロセスの ID。
shm_nattch この共有メモリ・セグメントをメモリに付加(attach)しているプロセスの数。
shm_atime 最後に shmat(2) システム・コールを行なった時間。
shm_dtime 最後に shmdt(2) システム・コールを行なった時間。
shm_ctime 最後に shmctl(2) システム・コールを行なって、 shmid_ds 構造体を変更した時間。

関連項目


msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3)

openSUSE Logo

コンテンツ