在移植的linux上使用shmget、sem_open创建共享内存,总显示创建失败。
1、shmget异常
shmid = shmget((key_t)0x11,SHM_SIZE,0666 | IPC_CREAT);
if(shmid == -1){
printf("Init the shared memory[%dKB] failed [%d:%s]!\n",SHM_SIZE/1024, errno, strerror(errno));
return ERROR_SHMGET;
}
显示信息总显示失败:38:Function not implemented。
经过各种查找,最终定位为内核未支持System V IPC选项,最终重新配置内核选项,重新编译完成:
完成烧录重新编译即可正常。
参考System V IPC选项作用:
2、sem_open打印同样的错误
这是由于在Linux内核中,创建信号量的默认路径是/dev/shm。当你要创建一个信号量/tmp/mysem时,实际上是创建了一个/dev/shm /sem.tmp/mysem,而这里由于/dev/shm/tmp目录根本就不存在,所以会出错。
所以我的问题是创建了对应的目录之后就ok了。
参考链接:https://www.cnblogs.com/fengkang1008/p/4733193.html