为什么我不能为其信号量集打开4个信号量的semget? 即:
semget(key_t key, int nsems, int semflg);
使用nsms调用上述函数为3很好,但是使用4则返回减1 ...
int sempahore = semget((key_t)key,4,IPC_CREAT | MY_PERMS);
以上代码仅在我更改4 for 3
时才有效其他明智的errno返回无效参数
答案 0 :(得分:3)
根据Linux框上的手册页,如果“nsems小于0或大于每个信号量集信号量(SEMMSL)的限制,semget
可以返回EINVAL
,或者与密钥对应的信号量集已经存在,并且nsems大于该集中的信号量数。“
我怀疑你遇到了第二种情况 - 检查你是否已经在其集合中创建了一个具有相同密钥和3个信号量的集合。