вызов Java из кода C - PullRequest
       4

вызов Java из кода C

3 голосов
/ 07 июня 2011

Наша модель программирования выглядит следующим образом:

Код c предназначен для захвата в режиме реального времени (очень частых) событий системы, а код Java запускается как сервер для получения запроса. Когда происходит событие, захваченное кодом c, нам нужно отправить запрос в код java и дождаться ответа. Я пробовал JNI для вызова Java из c, но кажется, что он зависает после запуска в течение нескольких секунд. JNI необходимо инициализировать jvm и искать обработчик в файле класса. Есть ли лучший способ общения между C и Java? Могу ли я скомпилировать код Java в двоичный файл и связать его с кодом C? Спасибо

Ответы [ 3 ]

3 голосов
/ 07 июня 2011

Возможно, вы захотите изучить использование сокетов, если задействована хорошая парадигма производитель-клиент-потребитель-сервер. Таким образом, C-код выполняется в фоновом режиме и передает информацию в службу Java через сокет-соединение, а службы Java, в свою очередь, отправляют ответы обратно в C-код. Вы также можете изучить использование FIFO или именованных каналов для связи, но сокеты, по крайней мере локально на машине, на большинстве платформ бывают довольно быстрыми и эффективными.

Кроме того, сервис Java может запускать C-код при запуске, если вам нужно работать таким образом, или наоборот (т. Е. C-код может отключить виртуальную машину и запустить сервис Java).

1 голос
/ 07 июня 2011

Один из вариантов - запустить приложение Java в отдельном процессе и использовать межпроцессное взаимодействие между приложением java и сборщиком данных C.

Что касается компиляции Java и связывания с C, это возможно, если ваш конкретный набор инструментов поддерживает это. Например, если вы используете полнофункциональный компилятор GNU, gcc и gcj могут работать вместе, однако вы должны понимать, что Java - это не только язык, но и среда. Выполнение нативной компиляции Java может не дать вам никакой причины использовать Java для системы.

1 голос
/ 07 июня 2011

Если код Java работает как сервер , вы должны отправить ему запрос из кода C, который может находиться в другом процессе или даже на другом компьютере. Лично я бы не стал пытаться вызывать Java-код напрямую из кода C, если бы не было действительно веских причин для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...