shmat(2) FreeBSD 一般コマンドマニュアル

shmat

前のページ 上に戻る 次のページ

shmat




書式

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

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

     int
     shmdt(void *addr);


解説

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

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

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

     o   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)

ABELNET VPSサービス