在Linux下调用semget()时的EINVAL

时间:2013-03-12 23:21:28

标签: c++ linux ipc semaphore

为什么我不能为其信号量集打开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返回无效参数

1 个答案:

答案 0 :(得分:3)

根据Linux框上的手册页,如果“nsems小于0或大于每个信号量集信号量(SEMMSL)的限制,semget可以返回EINVAL,或者与密钥对应的信号量集已经存在,并且nsems大于该集中的信号量数。“

我怀疑你遇到了第二种情况 - 检查你是否已经在其集合中创建了一个具有相同密钥和3个信号量的集合。