小白求助,共享内存问题~~

ZlZtung 2019-03-22 10:13:30
一个进程中循环:
sem_wait(g_ipcSem);

memset(g_shmTxMem, 0, SHM_SIZE);

printf("data: 0x%x 0x%x \n", data[0], data[1]);

memcpy(&g_shmTxMem[1], data, 7);

printf("0x%x 0x%x 0x%x \n", g_shmTxMem[0], g_shmTxMem[1], g_shmTxMem[2]);

sem_post(g_ipcSem);

打印的共享内存数据没问题,
到另一个进程中读取共享内存前三字节,有时候出现全0的情况;

求教为什么会导致这种情况发生!!
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZlZtung 2019-07-31
  • 打赏
  • 举报
回复
引用 1 楼 LubinLew 的回复:
1.先校验一下sem_wait和sem_post的返回值 2.检查一下共享内存的创建是否有问题
加上了校验就没问题了,很奇怪啊。。。什么原理呢
老葱1# 2019-06-28
  • 打赏
  • 举报
回复
sem_wait 是内核函数,会被中断,所以必须检查返回
JT同学 2019-06-04
  • 打赏
  • 举报
回复
1、你用的是POSIX信号量,要在进程间通讯是需要设置在共享内容上的,可以看看初始化是否正确 2、可以使用XSI信号量,可以参考:https://blog.csdn.net/weixin_42462202/article/details/90754860
636f6c696e 2019-03-22
  • 打赏
  • 举报
回复
调用底层接口不判断返回值和errno是非常危险的行为
LubinLew 2019-03-22
  • 打赏
  • 举报
回复
1.先校验一下sem_wait和sem_post的返回值
2.检查一下共享内存的创建是否有问题

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧