[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