shmop_write

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

shmop_write共有メモリブロックにデータを書き込む

説明

shmop_write(Shmop $shmop, string $data, int $offset): int

shmop_write() は、共有メモリブロックに文字列を書き込みます。

パラメータ

shmop

shmop_open() で作られた共有メモリブロックの識別子。

data

共有メモリブロックに書き込む文字列

offset

共有メモリセグメント内部のどこから、データを書き始めるかを指定します。

返り値

書き込んだ data のサイズを返します。

変更履歴

バージョン 説明
8.0.0 PHP 8.0.0 より前のバージョンでは、 失敗した時に false を返していました。
8.0.0 引数 shmop は、 Shmop クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、リソースが期待されていました。

例1 共有メモリブロックに書き込む

<?php
$shm_bytes_written 
shmop_write($shm_id$my_string0);
?>

この例は、$my_string にあるデータを共有メモリブロックに書き込みます。 $shm_bytes_written には、書かれたデータのバイト数が入ります。

参考

  • shmop_read() - 共有メモリブロックからデータを読み取る

add a note add a note

User Contributed Notes 1 note

up
0
radupb at yahoo dot com
3 years ago
I guess pack-unpack are the handy functions for encoding/decoding data as/from a binary string for shmop_write/shmop_read. Example:

$format='LLLLSSCCCC';  //data format for pack
$key=1;
if( !($shmid=shmop_open($key,'n',0660,30)) )
  die('shmop_open failed.');

//my data to encode:
$hd=array('ALIVE1'=>1,'ALIVE2'=>2,'ALIVE3'=>3,'ALIVE4'=>4,
      'CRTPTR'=>5,'CRTSEQ'=>6,
      'CTW'=>7,'LOCK'=>8,'PLAY'=>9,'MISS'=>10
);

$tmp=pack( $format, $hd['ALIVE1'],$hd['ALIVE2'],$hd['ALIVE3'],$hd['ALIVE4'],  $hd['CRTPTR'],$hd['CRTSEQ'],$hd['CTW'],$hd['LOCK'],$hd['PLAY'],$hd['MISS'] );

if( ($w=shmop_write($shmid,$tmp,0))!=24 )
  die('write error $w='.$w);

And reading from some other process:
$key=1;
if( !($shmid=shmop_open($key,'w',0,0)) )
  die('shmop_open failed.');

$formatR='L4ALIVE/SCRTPTR/SCRTSEQ/CCTW/CLOCK/CPLAY/CMISS'; //data format for unpack

$hd=unpack( $formatR, shmop_read( $shmid,0,24) );
echo'hd:<pre>';print_r($hd);echo'</pre>';
To Top