• 締切済み

共有メモリについて

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

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.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)); };

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> JAVAで共有メモリって使えるんですか? SYSV でいう IPC は、使えません。だって、unix 以外でも Java は動きますから。 > Cで生成した共有メモリをアタッチ出来る方法 > をご存知の方がいらっしゃいましたら、教えて > 頂けないでしょうか? どうしても、これをやりたい、ということであれば、JNI (Java Native Interface) と 言う方法を使って、Java から C で作った関数を呼ぶことができますので、それを 利用することになります。 # 自称初心者には、荷が重いかも

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

関連するQ&A