我想 pack 和 unpack 函式是用於將資料編碼/解碼為二進位字串,方便 shmop_write/shmop_read 使用的便捷函式。範例:
$format='LLLLSSCCCC'; // pack 的資料格式
$key=1;
if( !($shmid=shmop_open($key,'n',0660,30)) )
die('shmop_open 失敗。');
//我要編碼的資料
$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('寫入錯誤 $w='.$w);
從其他程序讀取:
$key=1;
if( !($shmid=shmop_open($key,'w',0,0)) )
die('shmop_open 失敗。');
$formatR='L4ALIVE/SCRTPTR/SCRTSEQ/CCTW/CLOCK/CPLAY/CMISS'; // unpack 的資料格式
$hd=unpack( $formatR, shmop_read( $shmid,0,24) );
echo'hd:<pre>';print_r($hd);echo'</pre>';