dポイントプレゼントキャンペーン実施中!

はじめまして!
JAVA初心者です。

JAVAで共有メモリって使えるんですか?
Cで生成した共有メモリをアタッチ出来る方法
をご存知の方がいらっしゃいましたら、教えて
頂けないでしょうか?

お願いします。

A 回答 (2件)

 JNIを使ってのWin32共有メモリ(メモリマップトファイル)の作成/使用は、


以下のようになると思います。

-----Java-----

class nativesm {

public native int CreateFileMapping();
public native int MapViewOfFile(int handle);
public native int ReadMemory(int addr);
public native int WriteMemory(int addr, int data);
public native boolean CloseMemory(int handle, int addr);

static { System.loadLibrary("nativesm"); };

}

public class sharemem {

public static nativesm SM;

public static void main(String arg[]) {

int Handle, Addr, i;

SM = new nativesm();

Handle = SM.CreateFileMapping();
System.out.println(Handle);
Addr = SM.MapViewOfFile(Handle);
System.out.println(Addr);
for (i = 0; i < 0x100; i ++)
System.out.println(SM.WriteMemory(Addr + i, SM.ReadMemory(Addr + i) + i));
SM.CloseMemory(Handle, Addr);

};

}

-----C-----

#include <windows.h>
#include "jni.h"

JNIEXPORT jint JNICALL Java_nativesm_CreateFileMapping(JNIEnv, jclass) {
return((jint)CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 0x100, "SharedMemory"));
};

JNIEXPORT jint JNICALL Java_nativesm_MapViewOfFile(JNIEnv, jclass, jint handle) {
return((jint)MapViewOfFile((HANDLE)handle, FILE_MAP_ALL_ACCESS, 0, 0, 0));
};

JNIEXPORT jint JNICALL Java_nativesm_ReadMemory(JNIEnv, jclass, jint addr) {
return((jint)(*(unsigned char *)addr));
};

JNIEXPORT jint JNICALL Java_nativesm_WriteMemory(JNIEnv, jclass, jint addr, jbyte data) {
return(*((unsigned char *)addr) = data);
};

JNIEXPORT jboolean JNICALL Java_nativesm_CloseMemory(JNIEnv, jclass, jint handle, jint addr) {
UnmapViewOfFile((void *)addr);
return((jboolean)CloseHandle((HANDLE)handle));
};
    • good
    • 0

> JAVAで共有メモリって使えるんですか?



SYSV でいう IPC は、使えません。だって、unix 以外でも Java は動きますから。

> Cで生成した共有メモリをアタッチ出来る方法
> をご存知の方がいらっしゃいましたら、教えて
> 頂けないでしょうか?

どうしても、これをやりたい、ということであれば、JNI (Java Native Interface) と
言う方法を使って、Java から C で作った関数を呼ぶことができますので、それを
利用することになります。

# 自称初心者には、荷が重いかも

参考URL:http://java.sun.com/docs/books/tutorial/native1.1/
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!