EN JA
SHMAT(2)
SHMAT(2) FreeBSD System Calls Manual SHMAT(2)

名称

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

ライブラリ

Standard C Library (libc, -lc)

書式

#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 は、エラーを示す値に設定されます。


The shmdt() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

shmat() システムコールは、次の場合に失敗します:
[ EINVAL]
shmid に対応する共有メモリセグメントが見つかりませんでした。
[ EINVAL]
addr 引数がアクセス可能なアドレスではありませんでした。

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

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

関連項目

shmctl(2), shmget(2)
August 2, 1995 FreeBSD