SHMGET(2V) — NEWS-OS Programmer’s Manual
名称
shmget − 共有メモリのセグメントの獲得
形式
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget (key, size, shmflg)
key_t key;
int size, shmflg;
解説
shmget は key に対応する共有メモリの 識別子を返します。
以下のどれかに該当すれば、 key に対して 共有メモリ識別子、 対応するデータ構造体、 size で示すサイズの共有メモリの セグメント ( intro(2) 参照) が生成されます。
key が IPC_PRIVATE 。
key が対応する共有メモリ識別子を持たず、 (shmflg & IPC_CREAT) が真。
生成時、 新規の共有メモリ識別子に対応するデータ 構造体が以下のように初期化されます。
shm_perm.cuid、 shm_perm.uid、 shm_perm.cgid および shm_perm.gid がそれぞれ 呼び出しプロセスの有効ユーザ ID および有効グループ ID に設定されます。
shm_perm.mode の下位 9 ビットは shmflg の下位 9 ビットに設定されます。
shm_segsz は size の値に設定されます。
shm_lpid、 shm_nattch、 shm_atime および shm_dtime が 0 に設定されます。
shm_ctime が現在時刻に設定されます。
以下の 1 つでも該当すれば、 shmget は失敗します。
[EINVAL] size がシステムの下限値より小さいまたは 上限値より大きい。
[EACCES] key に対する共有メモリ識別子が 存在するが、 shmflg の下位 9 ビットで指定する操作許可 ( intro(2) 参照) が認められない。
[EINVAL] key に対する共有メモリ識別子が 存在するが、 対応するセグメントのサイズが size より小さく、 size がゼロでない。
[ENOENT] key に対する共有メモリ識別子が 存在せず、 (shmflg & IPC_CREAT) が偽。
[ENOSPC] 共有メモリ識別子が生成されようとして、 共有メモリ識別子の数がシステムの 最大値を超えた。
[ENOMEM] 共有メモリ識別子、 対応する共有メモリのセグメント が生成されようとして、 有効な物理メモリ量が 不足した。
[EEXIST] key に対する共有メモリ識別子が 存在し、 ( (shmflg & IPC_CREAT) and ( shmflg & IPC_EXCL) ) が真。
リターン値
コマンドの実行に成功すると、 共有メモリ 識別子と呼ばれる正の整数が返されます。 失敗すると −1 が返され、 errno が設定されます。
関連事項
intro(2), shmctl(2V), shmop(2V).
NEWS-OSRelease 4.2.1R