[PHP-users 1173] キーが0x7fffffff以上の共有メモリよセマフォが指定できません
S.Sugichan
php-users@php.gr.jp
Tue, 14 Aug 2001 02:41:59 +0900
杉山です。
C言語のプロセスと、PHPで情報の共有を行いたく共有メモリを使ってます。
キーが0x0〜0x7fffffffまでは特に問題なく(全部やっていないがたぶん問題な
い)共有メモリが生成できます。
しかし0x80000000以上のキーで共有メモリを生成した場合、shmop_openの結果は
正しく帰って来るのですが、コマンドラインからipcsコマンドで、確認をとった
結果以下のように、0x80000000ではなく、0x00000000で生成されてしまいます。
[**** work]# ipcs
------ シェアードメモリセグメント --------
キー shmid 所有者 権限 バイト nattch 状態
0x00000000 5120 ******* 600 46084 11 対象
0x7fffffff 38913 ******* 666 200 0
0x00000000 38914 ******* 666 200 0
キーを0x0〜0x7fffffffすれば問題はないので、大きな問題では無いのですが、
C言語では生成が可能なので使える方法があったら知りたいです。
又、共有メモリの生成をせず、共有メモリを参照で見に行こうとしたときに、ワー
ニングの表示がされてしまいますが、ipcsコマンドの結果を見る以外で、共有メ
モリがあるどうかのチェックは可能なのでしょうか?
確認に使ったソース
$loopに =2; //登録個数
$basekey =0x7fffffff; //KEYベース
for ($i = 0; $i < $loop;$i ++)
{
$shm_id = shmop_open ($basekey+$i, "c", 0666, 200);
if(!$shm_id) {
echo "$i 番目の取得に失敗しました。<BR>";
}else{
echo "$i 番目の取得に成功しました。<BR>";
}
print "shm_id = $shm_id<BR>";
shmop_close($shm_id);
}
環境は:
Redhat7.0J+php4.0.6
共有メモリセマフォを有効にしたいため
./configureは
./configure \
--without-mysql \
--enable-track-vars \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-versioning \
--with-gd \
--enable-trans-sid \
--enable-mbstring \
--enable-mbstr-enc-trans \
--enable-sysvsem \
--enable-sysvshm \
--enable-shmop
としています。
S.Sugichan
Mail: sugichan@tkd.att.ne.jp