Неожиданное поведение sem_open - PullRequest
1 голос
/ 10 мая 2011

У меня есть следующий код:

// 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 Ответ

1 голос
/ 10 мая 2011

Указание O_CREAT не заставляет его создавать, оно создает семафор, только если он еще не существует.Поскольку вы обнаружите, что оно не принимает ваше значение инициализации, я предполагаю, что sem_name уже существует со значением 0 на момент вызова sem_open.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...