System V semget创建信号量但返回0

时间:2016-04-08 23:10:54

标签: c semaphore

我在Ubuntu 14.04服务器上玩System V信号量。每当我调用semget()时,要么创建或访问现有的信号量,都会返回零值。根据{{​​1}}的手册页,“如果成功,返回值将是信号量集标识符(非负整数),否则返回-1,其中errno表示错误。”

我确认sempahore实际上是通过运行semget命令创建的。

ipcs -s

所以在我的情况下,我相信------ Semaphore Arrays -------- key semid owner perms nsems 0x00000002 720903 myuser 666 1 应该返回720903而不是0。

这是我的代码:

semget()

这是输出

static void create_sem(void)

{
int key = 2;
int nsems = 1;
int sem_id;

    printf("Attempting to create new semaphore set with %d members\n", nsems);

    if(sem_id = semget((key_t)key, nsems, IPC_CREAT|IPC_EXCL|0666) == -1) {
        printf("Error creating semaphore\n");
        exit(1);
    }

    printf("Successfully created semaphore %d for key %d\n",
        sem_id, key);

    if(semctl(sem_id, 0, IPC_RMID, 0) == -1) {
        perror("Error destorying semaphore");
        exit(1);
    }
}

注意,如果我通过发出Attempting to create new semaphore set with 1 members Successfully created semaphore 0 for key 2 Error destroying semaphore: Operation not permitted 对我看到的semid进行硬编码,我可以使用ipcs -s成功删除信号量数组。

为什么semctl(720903, 0, IPC_RMID, 0)返回0而不是实际的半音?

0 个答案:

没有答案