运算符优先级引发的shmat函数Identifier removed 错误

在共享内存使用过程中出现了shmat函数Identifier removed 错误,通过#ipcs -m 可以看到shmget开辟的内存空间,且有shmid,但自己定义的变量shmid确一直为0,造成shmat的错误。

void * set_web_shm(void)
{
	int shmid;
	void * shmaddr=(void *)0;
	if(shmid=shmget((key_t)112233,sizeof(struct sys_all),0666|IPC_CREAT)<0){
		printf("shmget()  error\n");
		return NULL;
	}
	shmaddr=shmat(shmid,(void *)0,0);
	printf("shmadd=%d\n",shmaddr);
	if(shmaddr==(void*)-1){
		perror("shmat() error!709\n"); 
		return NULL;
	}

	printf("set shm ok...,shmadd=%d\n",(int)shmaddr);
	return shmaddr;	
}
排了一天的错发现:
if(shmid=shmget((key_t)112233,sizeof(struct sys_all),0666|IPC_CREAT)<0)
这句话中少了一对括号,造成了先运行
shmget((key_t)112233,sizeof(struct sys_all),0666|IPC_CREAT)<0
然后将逻辑表达式的值赋予shmid,当然为0了!!!!

可奇怪的是我tiny6410上是可以正常运行的,但到了我VMware 和nanopi 2s上确不行。

分析这可能是tiny6410的arm-linux-gcc、gcc、arm-linux-gnueabihf-gcc编译器对运算符优先级的问题吧

解决这个问题很简单先赋值后比较就ok了,也就是加一个括号

if((shmid=shmget((key_t)112233,sizeof(struct sys_all),0666|IPC_CREAT))<0)
搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值