[英]Shared Memory between PHP an QT
我想问问是否有可能在qt应用程序和php脚本之间创建共享内存。
我环顾四周,得出了以下想法(非常简单):
qt-侧
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
unsigned char data[5] = {1,2,3,4,5};
QSharedMemory smem;
smem.setNativeKey("12345");
qDebug() << smem.nativeKey();
if(smem.create(4096)){
qDebug() << "SharedMemory created.";
char *to = (char*)smem.data();
memcpy(to,data,5);
}
return a.exec();
}
PHP-侧面
<?php
$shm_ = shmop_open("12345", "w", 0,0);
if($shm_==FALSE){
echo "SHM Open Failed!";
}else{
$shm_s = shmop_size($shm_);
echo "SHM Open Succ! [Size : ".$shm_s."]<br>";
$data_read = shmop_read($shm_,0,5);
shmop_close($shm_);
}
?>
但是这种方法失败了。 shmop_open()说:无法附加或创建共享内存。 (在Windows / Qt版本5.5上运行Xampp)
提前致谢!
从理论上讲,这似乎是可能的。 但是实际上,由于不同平台的共享内存实现方式不同,因此通常无法满足要求。 Qt在其他系统特定的API(在不同的平台上有所不同)之上实现了自己的QSharedMemory
类。 PHP可能会这样做。
您需要找到两端兼容的技术。 寻找最特定于OS的方法,因为可能存在共同点。 我在Linux平台上经验不足,但是:
对于Windows平台,我发现了这个SO问题 ,它描述了PHP内部基于文件的共享内存。 在Qt端,您可以使用常规的Windows API函数。 两者很可能会匹配。
另一种方法是使用套接字。 最初,使用网络堆栈进行进程间通信可能看起来有些矫kill过正,但这有两个明显的优点:
memcpy()
调用的开销相当。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.