为什么共享内存已经存在,使用shmget()返回-1?但手工删除0x5005共享内存后,连续运行多个book调用共享内存又很正常。

来源:2-13 -1 进程的心跳机制

慕先生9503595

2023-03-26

在运行book程序时,一直报错。但用 ipcrm -m 0x5005 手工删除0x5005共享内存后,连续运行多个book调用共享内存又很正常。

错误:
./book aaa
shmget(5005) failed.

代码:
// 获取或创建共享共存。
int m_shmid;
if ( (m_shmid=shmget(SHMKEYP_,MAXNUMP_*sizeof(struct st_pinfo),0640|IPC_CREAT))==-1 )
{ printf(“shmget(%x) failed.\n”,SHMKEYP_); return -1; }
// 共享内存创建后,系统会自己对它进行初始化。

写回答

1回答

长歌_吴从周

2023-03-27

你可以用perror()把系统错误显示出来。

0
0

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程