Вызвать файл Java с помощью System() в c

Я пытаюсь запустить java-файл, который находится на моем веб-сервере, из кода c. Когда я загружаю веб-страницу, скрипт perl вызывает файл c, который затем вызывает файл java.

У меня настроен вызов, как в моем файле c:

System(java -cp <path> MyClass);

Но этот вызов System() возвращает 256 - (я думаю, файл не найден).

Я также пробовал:

System(cd /<path> && java MyClass);

И получить такие же результаты.

Если я запускаю ту же самую команду из терминала через ssh, она работает нормально, просто когда я пытаюсь запустить код из своего браузера, он выдает эту ошибку.

Любые идеи, если мой синтаксис неверен? Или я делаю что-то еще не так? Это как-то связано с цепочкой perl > c > java, которую я вынужден использовать?

EDIT Похоже, что среда выполнения c не смотрела на $PATH. Я добавил абсолютный путь к java.exe, и это сработало! Ууу

TLDR

решение:

System("/opt/jdk1.6.0_43/bin/java -cp <path> MyClass");

person Toadums    schedule 11.04.2013    source источник
comment
Нельзя ли просто запустить java -cp <path> MyClass прямо из Perl-скрипта?   -  person Kninnug    schedule 12.04.2013
comment
к сожалению, нет, потому что куча данных генерируется из существующего кода c. Так что мне нужно сделать это таким образом, к сожалению ..   -  person Toadums    schedule 12.04.2013
comment
Согласно этому ваша ошибка на самом деле умножается на 256, и ваш возврат на самом деле 1.   -  person syb0rg    schedule 12.04.2013
comment
Можете ли вы предоставить точный код в вашем файле C? (Не обязательно весь файл C, но соответствующие части, как они появляются в файле C). Потому что System(java -cp <path> MyClass); не должен даже компилироваться.   -  person Kninnug    schedule 12.04.2013
comment
Код просто системный (java -cp /theory/www/bin/tree MyClass);   -  person Toadums    schedule 12.04.2013
comment
Вы имеете в виду system(java -cp /theory/www/bin/tree MyClass); правильно?   -  person squiguy    schedule 12.04.2013
comment
да, система не система   -  person Toadums    schedule 12.04.2013
comment
Обычный способ решить эту проблему — fork(), а затем exec() из только что созданного процесса.   -  person syb0rg    schedule 12.04.2013
comment
да, я думал попробовать разветвить и выполнить. Я просто надеялся, что это сработает :) Попробую, спасибо!   -  person Toadums    schedule 12.04.2013
comment
кроме того, system ожидает string, верно? Например. system("ls -l");   -  person chrsblck    schedule 12.04.2013
comment
Да, извините, это строка   -  person Toadums    schedule 12.04.2013
comment
@Toadums Это система Linux или Windows?   -  person Bechir    schedule 12.04.2013
comment
Сервер работает Redhad   -  person Toadums    schedule 12.04.2013
comment
Вы проверили, что скрипт работает с соответствующими правами? PATH включает двоичный путь java... Он может иметь конфигурацию, отличную от вашей.   -  person Bechir    schedule 12.04.2013
comment
Вы должны попробовать system("pwd"); system(echo $PATH);`, чтобы проверить, работают ли нормальные команды, и узнать, где вы находитесь/что такое PATH.   -  person not all wrong    schedule 12.04.2013
comment
Вы должны опубликовать свое решение в качестве ответа и выбрать его, а не редактировать свой вопрос.   -  person Felype    schedule 21.05.2013