Как я могу узнать, реализует ли Unix-подобная ОС семафор POSIX? - PullRequest
1 голос
/ 11 декабря 2011

Как определить, поддерживает ли Unix-подобная ОС (например, Mac OS X / Linux 2.6) семафор POSIX? Могу ли я использовать sysconf, чтобы получить его?

#include <unistd.h>
long sysconf(int name);

Я просто хочу использовать API семафора POSIX (sem_init / sem_wait / sem_post) в Linux / Mac OS X. Я вижу, что в Linux 2.6 и MAC OS X 10.6.6 реализован семафор POSIX. Но как я могу определить, когда Unix-подобная ОС реализует семафор POSIX, а я пишу кроссплатформенные приложения.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011

Да, sysconf должен отвечать на запрос с тегом

 _POSIX_SEMAPHORES

с поддерживаемым номером версии. В системах POSIX у вас также есть getconf. Например, на моей Linux-коробке я получаю

>% getconf  _POSIX_SEMAPHORES
200809

Так что вы можете интегрировать это в скрипт сборки или что-то в этом роде. В Linux у вас также должна быть справочная страница posixoptions.

Но будьте осторожны, всегда проверяйте возвращение sem_init. AFAIR, OS X реализует это тривиально, как всегда возвращая -1.

2 голосов
/ 11 декабря 2011

Вам нужно будет попросить систему сборки проверить это.Я бы, наверное, просто посмотрел на sem_init и, если он там, просто предположил, что это POSIX-подобный sem_init.В случае системы autoconf это выглядело бы как

AC_SEARCH_LIBS([sem_init], [rt], ...)

Конечно, вы всегда можете выполнить более сложное тестирование с помощью целых программ, выполняющих цикл тестирования "отправка / ожидание".

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