As usually in JNI workflow we write Java code:
Idea about storing pointer to data structure into long is from jtux project, otherwise it should be message queue descriptor or (mqd_t)-1 in case of failure. Queue name must start with slash and 64 is O_CREAT | O_RDONLY we want queue to be created and to be read only for us. Now we compile PosixMQ.java and we run javah on class to get header for C implementation. On my box it looks like this:
/usr/lib/jvm/java-7-oracle/bin/javah -jni PosixMQ
Interesting part of PosixMQ.h looks like this:
Finally we write trivial C implementation, being careful to include all required imports:
I was too lazy to pass attributes around, it should be done at later stage. Permissions are also conveniently hardcoded, though passing octal through parameter list is not difficult. To compile this I used:
gcc -I/usr/lib/jvm/java-7-oracle/include -I/usr/lib/jvm/java-7-oracle/include/linux -o libPosixMQ.so -shared -fPIC PosixMQ.c -lrt
Switch -fPIC will not be required on 32 bit Linux and -lrt instruction to link against the real-time is required everywhere. To run it we do:
java -Djava.library.path=. PosixMQ
in directory where are binaries and we see:
We have MQ open.
Close returned 0
Not very impressive but again very simple. Maybe next time we send and receive some messages, who knows.
No comments:
Post a Comment