私が理解errno 22
している限りでは、shmget の場合は、共有メモリ セグメントが作成され、size の値がシステムが設定した最小値よりも小さいか、システムが設定した最大値よりも大きいためです。
しかし、私が理解していないのは、サーバーでshmgetを1回目にkey_idをIPC_PRIVATEとして、サイズを64Kとして、2回目をkey_idとして乱数として200とサイズを64Kと言って、常に失敗することです。
2番目のインスタンスのサイズを小さくしようとしましたが、私が見ている動作は理解できないものです
2 番目のインスタンスではkey_id > 250
、key_id が 200 から 250 の間でサイズが 8k までしか許可されず、16K まで許可されkey_id < 200
、32000 バイトまで許可されます。
また、最初にランダムな key_id で shmget を呼び出し、次に両方のサイズが 64K の IPC プライベートで呼び出す順序を変更すると、正常に動作します。
最初のシナリオで key_id がそのような重要な役割を果たす理由についての指針。そして、ランダムなkey_idでshmgetを呼び出してからIPC_PRIVATEを呼び出すのはなぜ機能しますが、他の方法では機能しません
Linux version 2.6.18-238.9.1.el5
(mockbuild@x86-002.build.bos.redhat.com) (gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-50)) を使用しており、言語は C です。