スポンサーリンク

SHMAT(2) FreeBSD システムコールマニュアル SHMAT(2)

名称

shmat, shmdt − 共有メモリをアタッチまたはデタッチする

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

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

void *

shmat(int shmid, const void *addr, int flag);

int

shmdt(const void *addr);

解説

shmat() システムコールは、 shmid によって識別された共有メモリセグメントを 呼び出しプロセスのアドレス空間にアタッチします。セグメントがアタッチされ るアドレスは次のように決定されます:

 addr が 0 の場合、セグメントは、カーネルが選択したアドレスにアタッチされます。

addr が 0 でなく、しかも SHM_RND が flag で指定されない場合、セグメン トは指定のアドレスにアタッチされます。

addr が指定されており、しかも SHM_RND が指定されている場合、 addr は 最も近い SHMLBA の倍数に切捨てされます。

shmdt() は、 addr で指定されるアドレスにある共有メモリセグメントを、呼び 出しプロセスのアドレス空間からデタッチします。

戻り値

正常に完了すると、 shmat() はセグメントがアタッチされているアドレスを返し ます。そうでない場合は -1 が返され、エラーを示すために errno が設定されま す。

関数 shmdt() は、処理が成功すると値 0 を返します。そうでない場合、値 -1 が返され、グローバル変数 errno が設定されてエラーを示します。

エラー

shmat() システムコールは次の場合に処理を失敗します:

       [EINVAL]

shmid に対応する共有メモリセグメントが見つかりませんで した。

[EINVAL]
addr
引数が有効なアドレスではありませんでした。

shmdt() システムコールは次の場合に処理に失敗します:

[EINVAL]
addr
引数は共有メモリセグメントを指していません。

関連項目

shmctl(2), shmget(2)

FreeBSD 10.0 August 2, 1995 FreeBSD 10.0

スポンサーリンク