sem_open的意外行为

时间:2011-05-10 16:32:18

标签: c posix semaphore

我有以下代码:

// DIE is macro i defined for catching errors

semc = sem_open(sem_name, O_CREAT, 0644, 1);    
DIE(semc == SEM_FAILED, "sem_open");

unsigned int val;
rc = sem_getvalue(semc, &val);
DIE(rc == -1, "sem_getvalue");
printf("sem is %d\n" , val);

虽然我用1初始化信号量,但打印的值为0 ... 怎么解释这个?

1 个答案:

答案 0 :(得分:1)

指定O_CREAT不会强制它创建,它只会创建信号量(如果它还不存在)。由于您发现它不会占用您的初始化值,因此我猜您sem_name时已经存在sem_open,其值为0。