Linux上のJavaの開発で、Unix Socket を使用したい為に、JNAでDirectMappingでlibcを読み込んで実装しました。

多重IO処理の為にepollも実装しましたが、JNAで union epoll_data_tが上手くマッピングされません。

Unionは以下の用に宣言しています。

class epoll_data extends Union{
public Pointer ptr;
public int fd;
public int u32;
public long u64;
}

class epoll_event extends Structure{
public int events;
public epoll_data = new epoll_data();
}

epoll_eventのサイズが正しく12バイトになるようにgetNativeAlignmenも実装しましたが、
epoll_data.u32 = 10;した後にepoll_ctlをするとu32が0に勝手にセットされてバグっています。

どうすれば、上手くUnion構造体をマッピングできるのでしょうか?

とりあえず、epoll_dataをlongとして扱うようにして、動かしていますが、気持ち悪いです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/23 19:40:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答0件)

回答はまだありません

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません