PHP使用共享內存進程間通信

創建並寫入數據

<?php
$file = __FILE__;
$key = ftok($file, 1);
$size = 4096;
$shmid = shmop_open($key, 'c', 0644, $size);
if($shmid === false){
    die('create fail');
}

$data = 'hello world';
$packData = pack('a*', $data); //數據壓縮成二進制字符串,null填充
$dataSize = shmop_write($shmid, $packData, 0);  //第三個參數代表開始寫入數據的位置
if($dataSize === false){
    die('write fail');
}
shmop_close($shmid);
exit('success!');
success!
[Done] exited with code=0 in 0.287 seconds
$ ipcs -m
IPC status from <running system> as of Sun Mar  1 00:51:42 CST 2020
T     ID     KEY        MODE       OWNER    GROUP
Shared Memory:
m 983040 0x31040c43 --rw-r--r--      why    staff

另一個進程讀取並釋放

<?php
$file = __FILE__;
$key = ftok($file, 1);
$size = 4096;
$shmid = shmop_open($key, 'a', 0644, $size);
if($shmid === false){
    die('create fail');
}

$data = shmop_read($shmid, 0, $size);
if($data === false){
    die('read fail');
}
$res = unpack('a*', $data);
print_r($res[1]);

$res = shmop_delete($shmid);
if($res === false){
    die('delete fail');
}
shmop_close($shmid);
hello world
[Done] exited with code=0 in 0.288 seconds
$ ipcs -m
IPC status from <running system> as of Sun Mar  1 00:55:43 CST 2020
T     ID     KEY        MODE       OWNER    GROUP
Shared Memory:

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章