2012-03-12 145 views
0

如何獲取c程序中信號量集中可能的最大信號量數量? 下面的程序得到了一套10 semaphored通過旗語ID semidC中設置的信號量的最大信號量數

#include <sys/ipc.h> 
#include <sys/sem.h> 

key_t key; 
int semid; 

key = ftok("/home/somefile", 'E'); 
semid = semget(key, 10, 0666 | IPC_CREAT); 

但如果我想叫semget功能,因此,它總是會在返回一組信號燈possibe的最大數量的定義系統(我的情況下爲SEMMSL,250)。這不是#define聲明。那麼除了打開/proc/sys/kernel/sem文件以外,還有其他方法嗎?

回答

1

這聽起來像你已經有了答案 - 打開/ proc/sys/kernel/sem並在讀出的第一個數字上調用atoi()。有時,解析/ proc文件系統是Linux問題的最佳解決方案。

但是,我在/ usr/include/linux中grep'd爲250。它看起來像你追求生活/usr/include/linux/sem.h中的#define:

#define SEMMSL 250 

因此,假設Linux的頭文件被安裝,你應該能夠#包括LINUX/sem.h中,並得到訪問該SEMMSL定義。

這裏的權衡是使用#define將SEMMSL硬編碼到您的二進制文件中。如果您碰巧將二進制文件移動到另一臺具有較小編號的計算機上,則可以看到造成問題。 FWIW,我只檢查了我正在運行的x86_32,x86_64和PowerPC Linux機器(所有最近的Ubuntu發行版),它們都報告了250.但是,通過/ proc文件系統進行解析會爲正在運行的內核提供當前限制,我是一個更好的解決方案。