shmop_open

共有メモリブロックを作成またはオープンする

説明

Shmopfalse shmop_open(
    int $key,
    string $mode,
    int $permissions,
    int $size
)

shmop_open は共有メモリブロックを作成または オープンします。

パラメータ

key

共有メモリブロックのシステム ID であり、10 進数または 16 進数で指定することが可能です。

mode

フラグに設定できる内容は、次のとおりです。

  • "a" アクセス用(shmat に SHM_RDONLY を設定する) 既存の共有メモリセグメントを読み込み専用でオープンする必要がある場合に このフラグを使用してください。
  • "c" 作成用(IPC_CREATE を設定する) 新規に共有メモリセグメントが必要な場合にこのフラグを使用してください。 もし同じキーのセグメントがすでに存在する場合、それを読み書きモードで オープンしようと試みます。
  • "w" 読み込み & 書き込みアクセス用 共有メモリセグメントの読み込みや書き込みの必要がある場合にこのフラグを 使用してください。たいていの場合はこのフラグを使用します。
  • "n" 新規メモリセグメントの作成用(IPC_CREATE|IPC_EXCL を設定する) 新規に共有メモリセグメントが必要で、もし同じフラグのセグメントが 存在するときには失敗させたい場合にこのフラグを使用してください。 セキュリティを確保するために、このフラグは有用です。これを使用する ことで、条件の競合による問題を避けることが可能です。

permissions

共有メモリセグメントに設定したい 許可属性で、ファイルに関する許可属性と同様なものです。許可属性は、 例えば 0644 のような 8 進数形式で渡す必要があります。

size

作成したい共有メモリブロックの大きさをバイト数で指定します。

注意:

注意: 既存のメモリセグメントをオープンする場合には、3 番目および 4 番目の引数には 0 を指定する必要があります。

戻り値

成功した場合は、shmop_open は 作成した共有メモリセグメントにアクセスするために使用する Shmop クラスのインスタンスを返します。 失敗した場合に false を返します。

エラー / 例外

mode が不正な値だったり、 size が 0 以下の値の場合、 ValueError がスローされます。 それ以外の場合で、処理に失敗した場合は E_WARNING が発生します。

変更履歴

バージョン 説明
8.0.0 成功時に、この関数は Shmop クラスのインスタンスを返すようになりました。 これより前のバージョンでは、リソースが返されていました。
8.0.0 mode が不正な値だったり、 size が 0 以下の値の場合、 ValueError がスローされるようになりました。 これより前のバージョンでは、E_WARNING が発生し、 false を返していました。

例1 共有メモリブロックを新規に作成する

<?php
$shm_key = ftok(__FILE__, 't');
$shm_id = shmop_open($shm_key, "c", 0644, 100);
?>

この例は、ftok が返すシステム ID の共有メモリブロックをオープンします。

参考

  • shmop_close
  • shmop_delete