2013-12-05 3 views
1

Моя задача - реализовать протокол многоадресной маршрутизации (DVMRP) с использованием файлов (без сокетов или потоков). У меня будет три Java программыкак принять входные данные из файла .sh в java

  1. Host.java
  2. Router.java
  3. Controller.java

Процедура тестирования:

  1. Запускаем test1.sh файл сценария в новом окне терминала

test1.sh выглядит следующим образом:

rm -f lan? hout? hin? 
rm -f rout? 
router 0 0 1 & 
router 1 1 2 & 
router 2 2 3 & 
router 3 3 0 & 
controller host router 0 1 2 3 lan 0 1 2 3& 

Здесь, в строке, содержащей

router 0 0 1 & 

означает, что процесс создается из исполняемого файла «маршрутизатор» (в основном Router.java) и запускает его в фон с вводом 0 0 1, & Я думаю, что это в режиме bash.

Аналогично следующая строка

router 1 1 2 & 

означает, что другой процесс создается из исполняемого файла «маршрутизатор» (в основном Router.java) и работает в фоновом режиме с входом 1 1 2.

Аналогично линия:

controller ... 

означает, что другой процесс создается из исполняемого файла «контроллер» (в основном Controller.java) и работает в фоновом режиме с соответствующий ввод.

Как это сделать? Извините за ранее путаницы :)

+0

В чем проблема? Вы можете сделать: 'java Router 0 0 1 &' – anubhava

+0

OP хочет знать, как вызвать скрипт sh из Java с соответствующими аргументами – MxyL

+0

К последней строке в скрипте «host host маршрутизатор 0 1 2 3 lan 0 1 2 3 & ", вы хотите вызвать программу Controller.java с параметрами« host router 0 1 2 3 lan 0 1 2 3 », или вы намереваетесь заменить« маршрутизатор 0 1 2 3 »запуском, это команда ? Каков вывод команды маршрутизатора? – Henrik

ответ

4

Сначала вы компилировать Java программы:

javac Router.java 

Вы должны ссылаться на Java, как это:

java Router 0 0 1 & 

Вы можете найти привет мир example here

Редактировать: Я все еще не совсем уверен, что понимаю, что вы пытаетесь сделать, но вы можете попробовать cha NGe вышеуказанную test1.sh к этому:

rm -f lan? hout? hin? 
rm -f rout? 
java Router 0 0 1 & 
java Router 1 1 2 & 
java Router 2 2 3 & 
java Router 3 3 0 & 
java Controller host router 0 1 2 3 lan 0 1 2 3& 

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

javac Router.java Controller.java Host.java 
+0

У меня есть три программы Host.java, Router.java и Controller.java (реализация DVMRP с использованием файлов). Итак, сначала Host.java запускается из окна терминала, затем Router.java из другого окна терминала, а затем Controller.java из еще одного окна терминала. Затем файл сценария оболочки выполняется на еще одном терминале. – pk10

+0

Я не понимаю, что вы имеете в виду. .java-файлы скомпилированы в двоичные файлы (-ish) .class, которые вызывается с помощью «java ». Можете ли вы перефразировать свой вопрос, чтобы уточнить, что вы хотите выполнить? – Henrik

+0

Я редактирую вопрос с подробной информацией, пожалуйста, подождите. – pk10

0

Если я правильно понимаю, у вас есть программа Java под названием Router.java, который принимает параметры, и вы хотите, чтобы запустить его в фоновом режиме.

Если мое предположение верно, то вам необходимо сделать некоторые вещи:

  1. Компиляция программы Java
  2. Запуск программы в фоновом режиме

Для компиляции программы:

javac Router.java 

Для запуска вашей программы:

java Router 0 0 1 & 

После прочтения (и читать снова) ваш вопрос и ваши комментарии, я думаю, ваша проблема в том, что вы не знаете, как передавать параметры в программу Java из командной строки. Если это ваша проблема, вы должны помнить, что функция main имеет параметр args, что позволяет передавать значения из программы из командной строки. Переменная args представляет собой массив String объектов, которые вы можете использовать в своем коде:

public class Router { 
    /* 
    * Your methods go here 
    */ 
    public static void main(String[] args) { 
     /* 
     * The 'args' variable holds the arguments entered in the command line 
     */ 
     if(args[0].equals("a")) { 
      /* 
      * This is an example of how to read the arguments supplied in the command line. 
      */ 
     } 
    } 
} 
+0

Сценарий компилировать Router.java по: 'Java Router.java' Затем я запустить его: ' Java Router' Аналогично, я запустить две другие программы '' Host.java' & Controller.java ' на отдельных терминалах. Теперь мне нужно открыть другой терминал и выполнить файл сценария оболочки, а именно 'test1.sh', который содержит: ' rm -f lan? Хут? хин? rm -f route? маршрутизатор 0 0 1 & маршрутизатор 1 1 2 & маршрутизатор 2 2 3 & маршрутизатор 3 3 0 & хост-контроллер маршрутизатора 0 1 2 3 LAN 0 1 2 3 & ' Хост, процессы маршрутизатора и контроллера принимают входные сигналы связанные с ними из этого сценария. – pk10

+0

@ user2961121 Я не понимаю, что вы пытаетесь сделать. Ваши программы Java уже написаны, и вам нужно вызвать их из сценария оболочки? Или вы хотите вызвать сценарий оболочки из своих java-программ? – Barranka

+0

У меня есть java-программы. Шаги: 1. Запустите каждую программу java с отдельных терминалов 2. На новом терминале запустите файл сценария, который предоставляет вход для всех трех java-программ. – pk10

Смежные вопросы