Semop:参数无效

时间:2014-02-03 15:51:08

标签: c semaphore invalid-argument

我有这个代码,它基本上在数字sem的信号量上产生一个P.信号量在池中。问题是,有时候我会得到Invalid argument而我无法找出原因。

bool sem_p(key_t key, int sem){
    int semid = semget(key, sem, 0666);
    struct sembuf sb = {sem, -1, 0};
    if(semop(semid, &sb, 1) == -1){
        perror("sem p"); 
        printf("sem %d\n", sem);
        return FALSE;
    }
    return TRUE;
}

调用该函数时,会打印

sem p: Invalid argument

1 个答案:

答案 0 :(得分:2)

检查是否

int semid = semget(key, sem, 0666);

返回成功或失败。正如@VladLazaranenko所提到的,可能存在很多可能的错误。检查您调用的每个函数的每个返回码(如果它们返回值) - 对于生产系统。