php读取共享内存,php共享内存读取全0

PHP代码应该读取我在下面的C程序中创建的共享内存.但是,无论我将共享内存中的值设置为什么,我都会读取全0.

php代码:

$shm_id = shmop_open(9875, "a", 0, 0);

echo "shmid=".$shm_id." ";

echo "size=".shmop_size($shm_id). " ";

$shm_data = shmop_read($shm_id, 0, 8);

if($shm_data == FALSE)

echo "failed to read";

else

{

echo "data=";

for($i=0;$i < 8;$i++)

{

echo $shm_data[$i];

if($shm_data[$i] == 1)

echo "1";

else if($shm_data[$i] == 0)

echo "0";

else echo "v";

}

}

shmop_close($shm_id);

?>

C代码创建大小为8字节的共享内存块.

我有这个代码来创建共享内存块.我传入9875的密钥,我在php代码中使用它.

C代码:

buf1 = allocArray_shared(8, sizeof(unsigned char), &shmid, 9875);

for(i = 0; i < 8; i++)

{

buf1[i] = 0xFF;

}

void* allocArray_shared(int elementCount, int elementByteSize, int* shmid, key_t key)

{

//size of entire array(cols*rows* byte size + row pointers)

int array_size = elementByteSize * elementCount;

//Allocate enough space for all elements + row pointers

*shmid = shmget(key, array_size, 00666 | IPC_CREAT);

char * arr = (char*)shmat(*shmid, NULL, 0);

if(!arr) return NULL;

//Return the pointer to the first row pointer

return (void*)arr;

}

我检查了C程序正在使用ipcs命令创建共享内存区域,并且它具有正确的键值和从shmget返回的shmid值.我还将数据初始化为所有0xFF.

php程序成功打开了共享内存区域,并且shmid始终打印为2,这与shmget生成的shmid不匹配(这有关系,还是php将其映射到正确的shmid?).

$shm_data中的数据打印为全0,而应该是0xFF !!

有关使这项工作的任何提示?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值