SHMAT(2)

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

ライブラリ
libc

書式
<machine/param.h> <sys/types.h> <sys/ipc.h> <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 が設定されます。

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

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

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

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

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

関連項目
shmctl(2), shmget(2)