Java アプリケーションと C プロセスを POSIX メッセージ キュー経由で通信する必要があり、JNA を使用して通信したいと考えています。
いくつかの調査、読書、およびあなたの助けを借りて、メッセージキューを作成しようとする単純な Java アプリケーションから始めました。
/** Simple example of JNA interface mapping and usage. */
public class HelloJNAWorld {
// This is the standard, stable way of mapping, which supports extensive
// customization and mapping of Java to native types.
public interface IPCLibrary extends Library {
IPCLibrary INSTANCE = (IPCLibrary)
Native.loadLibrary("c",IPCLibrary.class);
int msgget(NativeLong key, int msgflg);
}
public static void main(String[] args) {
int id = IPCLibrary.INSTANCE.msgget(new NativeLong(12500), 0600|1);
if(id<0){
System.out.println("Error creating message queue. Id:"+id);
System.out.println(Native.getLastError());
}else{
System.out.println("Message queue id:" + idCola);
}
}
}
. msgctl
_ int msgget(key_t key, int msgflag);
_ key_t
としてマップできると仮定しましたNativeLong
が、msget
-1 を返しています。確認lastError
したところ、返された値は 2 です。これは、errno コードによると、「そのようなファイルまたはディレクトリはありません」を意味します。
これで私を助けてもらえますか?多分key_
t は別の方法でマッピングされるべきですか?たぶん、もっと多くのライブラリなどが必要ですか?