#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
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_PRIVATE は key_t 型である。その他の全てのシンボルはフラグ・フィールドとして int 変数に OR 演算で格納することができる。
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; /* 最後に変更された時間 */
};
struct semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime; /* 最後に操作した時間 */
time_t sem_ctime; /* 最後に変更した時間 */
unsigned long sem_nsems; /* 集合の中にあるセマフォー数 */
};
セマフォーは struct sem 型のデータ構造体であり、以下のメンバーを含んでいる:
struct sem {
int semval; /* セマフォーの値 */
int sempid; /* 最後に操作したプロセス ID */
};
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; /* 最後に変更した時間 */
};