shmid
によって指定された共有メモリセグメント上で
cmd
によって指定された処理を実行します:
IPC_STAT
|
struct shmid_ds
のセグメントを取得し、
buf
によって指定されたメモリにそれを保存します。
|
IPC_SET
|
struct shmid_ds
セグメントの
shm_perm.uid,
shm_perm.gid,
および
shm_perm.mode
の各メンバを
buf
で指された構造体のメンバに変更します。
呼び出しプロセスの実効ユーザ ID は、
shm_perm.uid
または
shm_perm.cuid
のどちらかと一致するか、またはスーパユーザ特権を持っている必要があります。
|
IPC_RMID
|
システムからセグメントを除去します。
セグメントにアタッチしたすべてのプロセスが終了するまで、除去は行われません。
しかし、いったん IPC_RMID 操作が実行されると、それ以降プロセスは
そのセグメントにアタッチすることを許されません。
操作が成功するためには、呼び出しプロセスの実効ユーザ ID が
shm_perm.uid
または
shm_perm.cuid
と一致するか、または呼び出しプロセスにスーパユーザ特権が必要です。
|
shmid_ds
構造体は次のように定義されます:
struct shmid_ds {
struct ipc_perm shm_perm; /* 操作パーミッション構造体 */
int shm_segsz; /* セグメントのサイズ (バイト単位) */
pid_t shm_lpid; /* 最後の共有メモリ操作のプロセス ID */
pid_t shm_cpid; /* 作成者のプロセス ID */
short shm_nattch; /* 現在のアタッチの数 */
time_t shm_atime; /* 最後の shmat() の時刻 */
time_t shm_dtime; /* 最後の shmdt() の時刻 */
time_t shm_ctime; /* shmctl() による最後の変更の時刻 */
void *shm_internal; /* SystemV の愚行 */
};