解决shmget和sem_open:errno:38:Function not implemented

在移植的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选项作用:

链接: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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值