SVIPC(7) | Linux Programmer's Manual | SVIPC(7) |
名前¶
svipc - System V プロセス間通信機構
書式¶
#include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
説明¶
このマニュアルページは System V プロセス間通信 (interprocess communication; IPC) 機構の Linux に おける実装を説明する。 このプロセス間通信機構には、 メッセージキュー (message queue)、セマフォー集合 (semaphore set)、 共有メモリセグメント (shared memory segment) などがある。以下で 資源 (resource) という用語を使用した場合にはこれらの機構のどれかを意味する。
資源へのアクセス許可¶
システムのそれぞれの資源は、IPC
への操作を許可するかどうかを決定する
ための情報を共通の構造体
struct ipc_perm
に格納して使用する。
ipc_perm
構造体には以下のメンバーが定義されている:
struct ipc_perm {
uid_t cuid; /* 作成者のユーザーID */
gid_t cgid; /* 作成者のグループID */
uid_t uid; /* 所有者のユーザーID */
gid_t gid; /* 所有者のグループID */
unsigned short 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_PRIVATE は key_t 型である。その他の全てのシンボルはフラグフィールドとして int 変数に OR 演算で格納することができる。
メッセージキュー¶
メッセージキューは正の整数
(msqid)
によって識別され、
<sys/msg.h>
に定義されている構造体
struct msqid_ds
に結びつけられている。
この構造体は以下のメンバーを含んでいる:
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
- 最後に msgrcv(2) を行なった時間。
- msg_ctime
- 最後に msqid_ds 構造体のメンバーが変更された時間。
セマフォー集合¶
セマフォー集合は正の整数
(semid)
によって識別され、
<sys/sem.h>
に定義されている構造体
struct semid_ds
に結びつけられている。
この構造体は以下のメンバーを含んでいる:
struct semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime; /* 最後に操作した時間 */
time_t sem_ctime; /* 最後に変更した時間 */
unsigned long sem_nsems; /* 集合の中にあるセマフォー数 */ };
- sem_perm
- セマフォー集合へのアクセス許可を指定する ipc_perm 構造体。
- sem_otime
- 最後に semop(2) システムコールを行なった時間。
- sem_ctime
- 最後に semctl(2) を行なって上記の構造体のメンバーを変更するか、セマフォー集合に属する セマフォーを変更した時間。
- sem_nsems
- セマフォー集合の中にあるセマフォーの数。 集合の中にあるそれぞれのセマフォーは負でない整数によって参照され、 0 から sem_nsems-1 までの番号を持つ。
セマフォーは struct sem
型のデータ構造体であり、以下のメンバーを含んでいる:
struct sem {
int semval; /* セマフォーの値 */
int sempid; /* 最後に操作したプロセス ID */ };
共有メモリセグメント¶
共有メモリセグメントは正の整数
(shmid)
によって識別され、
<sys/shm.h>
に定義されている struct
shmid_ds
構造体に結びつけられている。
この構造体は以下のメンバーを含んでいる:
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 構造体を変更した時間。
関連項目¶
ipcmk(1), ipcrm(1), ipcs(1), ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3)
この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2013-02-12 | Linux |