

|
|
HOME >> アルファベットで関数を検索 >> shmget
shmget [SYSTEMV IPCのsemctl システムコールを実行し、共有メモリセグメントを取得する]
[関数の使い方・書式]
○ = shmget ☆, ★, □
| ☆: |
(スカラー) |
共有メモリセグメントのキー値。 ・・・ 通常事前に取り決めておく。 |
| ★: |
(スカラー) |
新規作成する際はセグメントの大きさ(バイト数)。 ・・・ 大きすぎるとパフォーマンス問題発生の可能性。。 |
| □: |
(スカラー) |
フラグ。 ・・・ 新規作成時はアクセス権限とパラメータの論理和。
アクセス権限の指定方法は UNIX のファイルシステムと同じ。 |
| ○: |
(スカラー) |
成功時はセグメントID。エラー時は偽(未定義値)を返します。 |
[関数の機能]
新しい共有メモリセグメントを生成したり、アクセスして共有メモリセグメントのキーを返します。。
キー値☆が &IPC_PRIVATE の場合、新しい共有メモリセグメントが作成されます。
キー値☆は共有メモリセグメントの名前と使用されます。
&IPC_CREAT をフラグ□にセットしても、新規に共有メモリセグメントを作成することが出来ます。
その場合、新しい共有メモリセグメントはキーにセットされた名前で生成されIDが返されます。
二つ以上のプロセスに使用されるセグメントには0以外のキーを使用します。
但し、☆でセットしたキー値が既に存在していればその共有メモリセグメントのIDが返されます。
|
状況 |
戻り値 |
セットしたキー値 = 既存の共有メモリセグメントのキー値、かつ
フラグ = 0
フラグ = アクセス権限|&IPC_CREAT
フラグ = アクセス権限|&IPC_CREAT|&IPC_EXCEL
|
既存の共有メモリセグメントID
既存の共有メモリセグメントID
未定義値 |
セットしたキー値 != 既存の共有メモリセグメントのキー値、かつ
フラグ = 0
フラグ = アクセス権限|&IPC_CREAT
フラグ = アクセス権限|&IPC_CREAT|&IPC_EXCEL
|
未定義値
新しい共有メモリセグメントID
新しい共有メモリセグメントID |
キー値が &IPC_PRIVATE ではなく、フラグがセットされていない場合、キーの値に合致する名前の共有メモリセグメントIDが返されるかエラーとなります。
プラットフォームで SYSTEMV IPC がサポートされている必要があります。エラー発生時には、$! にエラーコードがセットされます。
[書式の例]
$id = shmget $key, $nsems, $flags;
サンプルソース
require "sys/ipc.ph";
require "sys/msg.ph";
$| = 1;
$key = 0x123;
$size = 32;
$id = shmget($key, $size, $(&IPC_CREAT | 0644);
unless (defined $id) { die "shmget エラー: $!\n"; }
print "共有メモリID: $id\n";
|