SHMCTL(2V) — NEWS-OS Programmer’s Manual
名称
shmctl − 共有メモリの制御
形式
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(shmid, cmd, buf)
int shmid, cmd;
struct shmid_ds ∗buf;
解説
shmctl は以下の cmd の指定内容によって、 いろいろな共有メモリ の制御を行います。 以下にその cmd の内容を示します。
IPC_STAT shmid に対応するデータ構造体の各 メンバの現在の値を buf で示す構造体に格納する。 この構造体の内容は intro(2) に定義されています。
IPC_SET shmid に対応 するデータ構造体の以下に示す メンバの値を buf で示す構造体の 対応する値に設定する。
shm_perm.uid
shm_perm.gid
shm_perm.mode /∗ only low 9 bits ∗/
この cmd は スーパーユーザの ID または shmid に対応するデータ構造体の shm_perm.uid の値と同じ有効ユーザ ID を持つプロセスによってのみ 実行できます。
IPC_RMID shmid によって示される共有メモリ 識別子をシステムから取り除き、 共有メモリのセグメント および対応するデータ構造体を 破壊します。 この cmd は スーパーユーザの ID または shmid に対応するデータ構造体の shm_perm.uid の値と同じ有効ユーザ ID を持つプロセスによってのみ 実行できます。
SHM_LOCK shmid によって示される共有メモリ のセグメントのロックします。 この cmd は スーパーユーザと同じ有効ユーザ ID を持つプロセスによってのみ実行できます。
SHM_UNLOCK shmid によって示される共有メモリ のセグメントのロックを解除します。 この cmd は スーパーユーザと同じ有効ユーザ ID を持つプロセスによってのみ実行できます。
shmctl は以下の内容の 1 つでも該当する場合は、 失敗します。
shmid が有効な共有メモリ識別子でない。 [EINVAL]
cmd が有効なコマンドではない。 [EINVAL]
cmd が IPC_STAT であり、 操作許可が呼び出しプロセス ( intro(2) 参照) に対して認められない。 [EACCES]
cmd が IPC_RMID または IPC_SET で、 呼び出しプロセスの有効ユーザ ID がスーパーユーザと異なり、 shmid に対応するデータ構造体の shm_perm.uid の値と同じではない。 [EPERM]
cmd が SHM_LOCK または SHM_UNLOCK で、 呼び出しプロセスの有効ユーザ ID がスーパーユーザと異なる。 [EPERM]
cmd が SHM_UNLOCK で、 shmid で指定する共有メモリのセグメント がメモリにロックされていない。 [EINVAL] buf が不正なアドレスを示している。 [EFAULT]
リターン値
コマンドの実行に成功すると、 ゼロが返されます。 失敗すると、 −1 が返され、 errno が設定されます。
関連事項
NEWS-OSRelease 4.2.1R