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

名称

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

ライブラリ

Standard C Library (libc, -lc)

書式

#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) で決まります:

S_IRUSR
所有者のための読み込みアクセス。
S_IWUSR
所有者のための書み込みアクセス。
S_IRGRP
グループのための読み込みアクセス。
S_IWGRP
グループのための書み込みアクセス。
S_IROTH
その他のための読み込みアクセス。
S_IWOTH
その他のための書み込みアクセス。

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

戻り値

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

エラー

shmget() システムコールは、次の場合に処理に失敗します:
[ EINVAL]
指定したサイズが、既存セグメントのサイズより大きいです。指定したサイズが、システムの最低値より小さいか、最大値より大きいです。
[ ENOENT]
key と一致する共有メモリセグメントがなく、IPC_CREAT が指定されていません。
[ ENOSPC]
要求を満たす十分なメモリを、カーネルが割り当てられません。
[ EEXIST]
IPC_CREAT と IPC_EXCL が指定され、 key に対応する共有メモリセグメントがすでに存在します。
December 17, 2010 FreeBSD