スポンサーリンク

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

名称

shmget − 共有メモリの識別子の取得

ライブラリ

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

書式

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

int

shmget(key_t key, size_t size, int flag);

解説

shmget() は、 keyflag の値に従って、新しく作成した共有メモリセグメン トまたは既存の共有メモリセグメントの識別子を戻します。キーはファイル名に 似たもので、IPC オブジェクトを指定するハンドルを提供するものです。キーの 指定方法には 3 つ方法があります:

 IPC_PRIVATE を指定すると新しい IPC オブジェクトが作成されます。

整定数を指定できます。 key に対応する IPC オブジェクトが指定されてお らず、IPC_CREAT ビットが flag で設定されている場合は、新しい IPC オブ ジェクトが作成されます。

ftok(3) を使用し、パス名からキーを作成できます。

新しく作成された IPC オブジェクトのモードは、 flag 引数に渡す以下の定数の 論理和 (OR) で決まります:

SHM_R
ユーザ用の読取りアクセス

SHM_W
ユーザ用の書込みアクセス

(SHM_R>>3)
グループ用の読取りアクセス

(SHM_W>>3)
グループ用の書込みアクセス

(SHM_R>>6)
その他用の読取りアクセス

(SHM_W>>6)
その他用の書込みアクセス

新しい共有メモリセグメントを作成する場合、 size は、新しいセグメントのバ イト単位のサイズを表わします。セグメントのサイズは、カーネルに便利なよう にある倍数に切り上げられることがあります (すなわちページサイズ)。

戻り値

処理が正常に完了すると、 shmget() は共有メモリセグメントの正整数の識別子 を返します。そうでない場合は -1 が返され、エラーを示すために errno が設定 されます。

エラー

以下の場合、 shmget() システムコールは処理を失敗します:

       [EINVAL]

指定したサイズが、既存セグメントのサイズより大きいで す。指定したサイズが、システムの最低値より小さいか、最 大値より大きいです。

[ENOENT]
key
と一致する共有メモリセグメントがなく、IPC_CREAT が 指定されていません。

[ENOSPC]
要求を満たす十分なメモリを、カーネルが割り当てられませ ん。

[EEXIST]
IPC_CREAT と IPC_EXCL が指定され、 key に対応する共有 メモリセグメントがすでに存在します。

関連項目

shmat(2), shmctl(2), shmdt(2), ftok(3)

FreeBSD 10.0 July 3, 1995 FreeBSD 10.0

スポンサーリンク