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 の指定内容によって、 いろいろな共有メモリー の制御を行います。 以下にその cmds の内容を示します。
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.1C