使用与 php 和 c 的共享内存?
Posted
技术标签:
【中文标题】使用与 php 和 c 的共享内存?【英文标题】:using shared memory with php and c? 【发布时间】:2009-03-25 09:04:38 【问题描述】:windows中php脚本和c程序可以使用共享内存进行通信吗?
c 程序一直运行并使用内存映射文件,即:
handle1 = CreateFileMapping(
(HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(byte)*BUFFER_SIZE, "my_foo" );
hView = (LPINT) MapViewOfFile(handle1, FILE_MAP_ALL_ACCESS, 0, 0, 0);
对于 PHP 脚本,我可以使用下面的代码来打开 c 程序创建的内存映射文件吗?
$shmkey = @shmop_open(ftok("my_foo", 'R'), "a", 0644, $buffer_size);
还是c内存映射文件和php共享内存不同?
【问题讨论】:
【参考方案1】:PHP shmop 函数只是底层POSIX functions 的包装器,在windows 下似乎不可用。
来自PHP manual:
注意:Windows 2000 之前的 Windows 版本不支持 支持共享内存。在 Windows 下, shmop 仅在 PHP 运行时才有效 作为 Web 服务器模块运行,例如 作为 Apache 或 IIS(CLI 和 CGI 不会 工作)。
显然 PHP 在 apache 中模拟了这种行为,但由于它在独立的二进制文件中不可用,因此很难与 windows 等效项集成。
【讨论】:
【参考方案2】:我想让 PHP 访问由 Windows 应用程序创建和写入的共享内存。我通过创建自己的 php 扩展(称为 php_gsect.dll)来实现这一点。这可能不是您想要的,但我的 php_gsect 附加到全局部分并读取(或写入)一些字节,然后我可以对其进行操作。
仅供参考:我的 Windows 应用程序正在从另一个系统检索动态趋势数据并将数据放入一个命名的全局部分。 php 网页正在访问全局部分的数据并创建图表(使用 ESJ 图表库)。
【讨论】:
以上是关于使用与 php 和 c 的共享内存?的主要内容,如果未能解决你的问题,请参考以下文章