0

LinuxシステムおよびJavaからのJNI呼び出しを介してアクセスされる共有ライブラリを作成しました。

そのライブラリには、JNIメソッドおよびその他のネイティブメソッドで使用できるグローバルリングバッファが必要です。

さまざまなプログラムからSLにアクセスするとき、グローバル変数は常に必要なとおりであるため、これは問題にならないだろうと思いました。

しかし今、私のJNIメソッドでは、グローバル変数は初期化されていないようです(プログラムフローが強制するので、グローバル変数は初期化されるべきです)。

これが私の例です:

ringbuf_t ringbuffer;

void internalMethod() {
    // this method is first called from system-program
    ringbuffer = ringbuf_new(5000);
}


JNIEXPORT jint JNICALL Java_example_read(JNIEnv *env, jobject This) {
    // this method is later called via JNI
    if (!ringbuffer) {
        LOGI("uhhh, why is that buffer not set?!");
    }
}

ringbuffer-variableを本当にグローバルにして、共有ライブラリへのすべてのインスタンス/呼び出しがその変数の1つの同じインスタンスにアクセスできるようにするには、何をする必要がありますか?

4

1 に答える 1

0

コメントから、あるプロセスでメモリを割り当て、別のプロセスで使用したいと思われます。

この目的のために、共有メモリを調べることは良い考えかもしれません:「manshmget」は良いスタートであるはずです。

これは特にJNIとは関係がなく、OSからの制限であることに注意してください。

編集:私はあなたに提案します:

  1. 共有メモリを読んでください-これがどのように機能するかの概念を理解する必要があります。
  2. まず、2つの単純なアプリケーション間でメモリを共有してみてください
  3. その後、JNIアプリケーションに実装します
于 2013-03-26T14:23:09.343 に答える