2011-12-11 40 views
1

如何確定類Unix操作系統(例如Mac OS X/Linux 2.6)是否實現POSIX Semaphore?我可以使用sysconf來獲取它嗎?如何獲得一個類Unix的OS是否實現POSIX Semaphore?

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

我只是想使用POSIX信號API(sem_init/sem_wait/sem_post)在Linux的/ Mac OS X中我看到在Linux 2.6和Mac OS X 10.6.6的實現POSIX信號。但是我怎麼能確定一個類Unix系統實現POSIX信號量,而我編寫跨平臺的應用程序。

+0

我不知道我理解你的問題。 'sysconf'是一個運行時測試。大概你想在編譯時檢查,不是嗎? – Mat

+0

@Mat對不起,我修改了描述,希望我明確表達。 – ufengzh

回答

2

你將不得不問你的構建系統來檢查它。我可能只是尋找sem_init,如果它在那裏,只是假設它是一個類POSIX的sem_init。在autoconf的系統的情況下,看起來像

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

當然,你總是可以做整個程序運行的發佈/等待測試周期更詳細的測試。

+0

我認爲只是要求'sem_init'是不夠的,因爲至少有一個系統(OS X?)通過總是返回'-1'來實現它:(( –

3

是的,是的sysconf應該回答的查詢與標籤

_POSIX_SEMAPHORES 

與支持的版本號。在POSIX系統上,您也有getconf。 E.g在我的Linux機器,我得到

>% getconf _POSIX_SEMAPHORES 
200809 

所以,你可以在一個構建腳本或類似的東西整合這一點。 在Linux上,你也應該有一個手冊頁posixoptions

但要小心總是檢查返回sem_init。 AFAIR,OS X實現這一點一如往常返回-1

+0

)謝謝。在我的Mac OS X 10.6上。 6,_POSIX_SEMAPHORES是'undefined' – ufengzh

相關問題