kazmax - Linux で自宅サーバー

svipc - 約束事その他の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 関連項目

名前

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>に定義されており、以下のメンバーが含まれている:
ushort cuid; /* 作成者のユーザーID */
ushort cgid; /* 作成者のグループID */
ushort uid; /* 所有者のユーザーID */
ushort 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;
ushort msg_qnum; /* キューにあるメッセージの数 */
ushort msg_qbytes; /* キューの最大バイト数 */
ushort msg_lspid; /* 最後に msgsnd() をした PID */
ushort msg_lrpid; /* 最後に msgrcv() をした PID */
time_t msg_stime; /* 最後に msgsnd() をした時間 */
time_t msg_rtime; /* 最後に msgrcv() をした時間 */
time_t msg_ctime; /* 最後に変更された時間 */

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

セマフォー集合

セマフォー集合は正の整数 ( semid )によって識別され、 <sys/sem.h> に定義されている構造体 struct semid_ds に結びつけられている。 この構造体は以下のメンバーを含んでいる:
struct ipc_perm sem_perm;
time_t sem_otime; /* 最後に操作した時間 */
time_t sem_ctime; /* 最後に変更した時間 */
ushort sem_nsems; /* 集合の中にあるセマフォー数 */

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

セマフォーは "struct sem" 型のデータ構造体であり、以下のメンバーを含んでいる:
ushort semval; /* セマフォーの値 */
short sempid; /* 最後に操作したプロセス ID */
ushort semncnt; /* semval の増加を待つ数 */
ushort semzcnt; /* semval = 0 を待つ数 */

semval
セマフォー値: 負でない整数。
sempid
このセマフォーを最後に操作したプロセスの ID。
semncnt
semval の値が増加するを待って停止しているプロセスの数。
semznt
semval が 0 になるのを待って停止しているプロセスの数。

共有メモリ・セグメント

共有メモリ・セグメトは正の整数 ( shmid )によって識別され、 <sys/shm.h> に定義されている struct shmid_ds 構造体に結びつけられている。 この構造体は以下のメンバーを含んでいる:
struct ipc_perm shm_perm;
int shm_segsz; /* セグメントのサイズ */
ushort shm_cpid; /* 作成者のプロセス ID */
ushort shm_lpid; /* 最後に操作したプロセス ID */
short 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 ()または shmdt ()システム・コールを実行したプロセスの ID。
shm_nattch
この共有メモリ・セグメントをメモリに付加(attach)しているプロセスの数。
shm_atime
最後に shmat ()システム・コールを行なった時間。
shm_dtime
最後に shmdt ()システム・コールを行なった時間。
shm_ctime
最後に shmctl ()システム・コールを行なって、 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)