SHMAT(2)

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

ライブラリ
libc

書式
<machine/param.h> <sys/types.h> <sys/ipc.h> <sys/shm.h> void * shmat(int shmid, void *addr, int flag) int shmdt(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)