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:
发布了253 篇原创文章 · 获赞 47 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/104585099
今日推荐