shmctl(2) を使用して、共用メモリセグメントのアクセス権とその他の特性を変更します。cmd 引数は、次の制御コマンドのいずれか 1 つです。
SHM_LOCK |
指定したメモリ内の共用メモリセグメントをロッキングする。このコマンドを実行するプロセスは、有効なスーパーユーザの ID を持っていなければならない。 |
SHM_UNLOCK |
共用メモリセグメントのロッキングを解除する。このコマンドを実行するプロセスは、有効なスーパーユーザの ID を持っていなければならない。 |
IPC_STAT |
制御構造体にあるステータス情報を取得して、buf が指すバッファに入れる。このコマンドを実行するプロセスは、セグメントの読み取り権を持っていなければならない。 |
IPC_SET |
有効なユーザおよびグループの識別子とアクセス権を設定する。このコマンドを実行するプロセスは、所有者、作成者、またはスーパーユーザの有効な ID を持っていなければならない。 |
IPC_RMID |
共用メモリセグメントを削除する。このコマンドを実行するプロセスは、所有者、作成者、またはスーパーユーザの有効な ID を持っていなければならない。 |
次に、shmctl(2) の使用例を示します。
#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> ... int cmd; /* shmctl() のためのコマンドコード */ int shmid; /* セグメント ID */ struct shmid_ds shmid_ds; /* 結果を保持するための共用メモリデータ構造体 */ ... shmid = ... cmd = ... if ((rtrn = shmctl(shmid, cmd, shmid_ds)) == -1) { perror("shmctl: shmctl failed"); exit(1); ... |