2012-03-12 11 views
0

Cプログラム内のセマフォ集合でセマフォの最大数を得る方法は? 次のプログラムは、セマフォ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の最大数のセットを返すようにすることによって定義されたsemaphored 10のセットを取得しますシステム(私の場合はSEMMSL,250)。 #defineステートメントではありません。だから/proc/sys/kernel/semファイルを開く以外の方法がありますか?

答えて

1

あなたは既に答えを得ているようですが、/ proc/sys/kernel/semとあなたが読んだ最初の番号でatoi()を呼び出します。場合によっては、/ procファイルシステムを解析することが、Linuxの問題に対する最善の解決策です。

しかし、私は/ usr/include/linuxで250 grepしました。それはあなたが/usr/include/linux/sem.hで命求めるの#defineのようになります。Linuxのヘッダーがインストールされていると仮定すると、そう

#define SEMMSL 250 

を、あなたは、Linux/sem.hを#includeして得ることができる必要がありますそのSEMMSLへのアクセスが定義します。

#defineを使用すると、バイナリにSEMMSLがハードコードされます。バイナリを小さな番号の別のマシンに移動すると、問題が発生していることがわかります。 FWIW、私はx86_32、x86_64、PowerPC Linuxマシンをチェックしています(すべての最近のUbuntuディストリビューション)。それらはすべて250と報告されています。しかし、/ procファイルシステムを解析すると、実行中のカーネルの現在の制限私はよりよい解決策として私を見ています。