gpt4 book ai didi

PHP - 访问使用 C++ 创建的共享内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:01 24 4
gpt4 key购买 nike

几天以来,我一直在努力让以下事情发挥作用:我有一个很小的 ​​C++ 程序,它从串口连续读取一些数据。此数据存储在共享内存中,如下所示:

HANDLE hMapFile;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
10,
NULL);

LPCTSTR pBuf;
pBuf = (LPTSTR) MapViewOfFileEx(
hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
10,
NULL);

while(true)
{
//... some code ...
CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
//... some code ...
}

现在我想用 PHP 访问这个共享内存。所以我尝试执行以下操作:

$shm_id = shmop_open($key, $mode, $security, $size);
$read = shmop_read($shm_id, 0, 10);
//... some code ...

但我不知道应该设置哪个 key 、模式、安全性和大小!

现在,在你开始写东西之前:我使用“MapViewOfFileEx()”因为我想设置一个固定地址以便 PHP 可以从一个固定地址读取。我也在 C++ 和 PHP 中用“0x00030000”试过这个。 C++ 能够创建 FileMapping,但 PHP 无法访问并给出错误消息:shmop_open():无法附加或创建共享内存段。作为 $mode,我将“a”设置为仅读取权限。作为 $security 我设置 0777 为所有访问...作为 $size 我设置 10 个字节。

如 PHP 手册中所述,如果我尝试附加到现有共享内存,我应该将 $security 和 $size 设置为 0,但这也不起作用。

我怎样才能完成这个概念?我猜想 C++ 的 BaseAdress 与 PHP 中的 $key 不一样,但是那么我如何告诉 PHP 共享内存块在哪里?如果这不可能让它工作:是否有另一种方法将数据从 C++ 程序传输到 PHP(在 wamp 服务器上运行)?

PS:正如我最近在其他问题中读到的那样,似乎无法与共享内存通信......我以前从未使用过命名管道,但是如何使用命名管道来实现我的问题?或者是否有更好/更快的方式来实现 C++ 和 PHP 之间的通信?

最佳答案

我建议您使用 Redis 来处理 C++ 和 PHP 之间的通信。你可以使用他的 Pub/sub 模块,非常强大。 http://redis.io/topics/pubsub .这里有一个 redis 的客户端列表:http://redis.io/clients

关于PHP - 访问使用 C++ 创建的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com