Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ shmat(2V) — NEWS-os 4.2.1R

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

名称

shmat, shmdt − 共有メモリの操作

形式

#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.2.1R

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