Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ shmop(2V) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

intro(2)

shmctl(2V)

shmget(2V)

SHMOP(2V)  —  NEWS-OS Programmer’s Manual

名称

shmop − 共有メモリーの操作。

形式

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

char ∗shmat (shmid, shmaddr, shmflg)
int shmid;
char ∗shmaddr
int shmflg;

int shmdt (shmaddr)
char ∗shmaddr

解説

Shmat は shmid で示される共有メモリー識別子に 対応する共有メモリーのセグメントを、 呼びだしプロセスのセグメント に取り付けます。 そのセグメントは 以下の標準の1つで指定されるアドレス で取り付けられます。

shmaddr がゼロであれば、 システムで指定される最初の有効アドレス に取り付けられます

shmaddr がゼロでなく、 (shmflg & SHM_RND) が真であれば、 (shmaddr - (shmaddr modulus SHMLBA)) で指定されるアドレスに取り付けられます。

shmaddr がゼロでなく、 (shmflg & SHM_RND) が偽であれば、 shmaddr で指定されるアドレスで 取り付けられます。

(shmflg & SHM_RDONLY) が真 ­{READ} であればセグメントが 読み出し専用で取り付けられ、 そうでなければ、 読み出しと書き込み 可能として 取り付けられます。

以下の内容の1つでも該当すれば、 Shmat は失敗し、 共有メモリーのセグメントは 取り付けられません。

­[EINVAL] Shmid は有効な共有メモリー識別子でない。

­ [EACCES] 操作許可が呼びだしプロセス に対して認められない ( intro(2) 参照)。

­[ENOMEM] 有効なデータ領域が共有メモリー のセグメントを取り付けるのには不足 している。

­[EINVAL] Shmaddr がゼロでなく、 (shmaddr - (shmaddr modulus SHMLBA)) の値が不正なアドレスである。

­[EINVAL] Shmaddr がゼロでなく、 (shmflg & SHM_RND) が偽で、 shmaddr の値が不正なアドレス。

­[EMFILE] 呼びだしプロセスに取り付けられた共有 メモリーのセグメントの数が システムの限界を超えている。

­[EINVAL] Shmdtは呼び出しプロセスのデータセグメントから shmaddr で指定された共有メモリのセグメントを 取除きます。 shmaddr が共有メモリーのセグメント のデータ・セグメントの開始アドレス ではない場合、 Shmdt は失敗し、 共有メモリーのセグメントは 取り除かれない。

リターン値

コマンドの実行が成功すると、 リターン値は以下のようになります。

Shmat は取り付けられた共有メモリー のセグメントの データ・セグメントの開始アドレスを 返します。

Shmdt はゼロを返します。

失敗した場合、 −1が返され、 errno が設定されます。

関連事項

exec(2), exit(2), fork(2), intro(2), shmctl(2V), shmget(2V). 

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026