SVIPC

Section: Linux Programmer's Manual (7)
Updated: 1993-11-01
Index JM Home Page roff page
 

名前

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> に定義されており、以下のメンバーが含まれている:

struct ipc_perm {
    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 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;   /* 最後に変更した時間 */
    ulong           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 */
}
semval
セマフォー値: 負でない整数。
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 構造体を変更した時間。
 

関連項目

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)


 

Index

名前
書式
説明
資源へのアクセス許可
メッセージ・キュー
セマフォー集合
共有メモリ・セグメント
関連項目

This document was created by man2html, using the manual pages.
Time: 04:32:06 GMT, November 19, 2007