передача значений в stdin для онлайн-судьи


Я делал онлайн-судью и столкнулся с небольшой проблемой

Что я делал до сих пор?

Итак, мой php-код берет пользовательский код и передает его функции Compile(), которая компилирует код и сообщает, была ли компиляция успешной или нет. Эта часть кода работает довольно хорошо.

Теперь осталось запустить код и выполнить оценку

Моя проблема

Моя проблема заключается в том, как обрабатывать входные данные stdin для пользователя. Пользователь обычно вводится из стандартного ввода с помощью scanf, BufferedReader и т. Д., И эти значения обычно берутся с клавиатуры. Теперь предположим, что я записал эти значения в файл. Как я буду кормить их этими ценностями?

Мои Попытки

Ну, я искал различные способы и наткнулся на это

fopen('php://stdin', 'w') 

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

 14
Author: Ayush choubey, 2013-11-02

2 answers

Если у вас есть скомпилированный код и вы знаете его язык, это немного проще.

Вы можете использовать функцию exec для выполнения кода, и вы можете использовать в качестве команды что-то вроде этого (для программы на языке си и протестировано):

$output = array();
exec("./main < sample_input.txt", $output);

И если вы теперь проверите переменную $output, у нее есть запись в массиве для каждой выведенной строки.

Надеюсь, это поможет.

 5
Author: Mauricio A. Cinelli, 2013-11-04 17:34:49

Точно, exec - это все, что вам нужно в PHP.

Однако, пока вам нужно не только запускать, но и оценивать, вы должны создать некоторый сценарий оболочки для запуска, подачи, получения выходных данных и проверки правильности выходных данных. Не забудьте правильно изолировать этот сценарий, потому что это угроза безопасности.

Exec кстати. предлагает также третий параметр, который является возвращаемым значением. Это очень полезно, если вы создаете свой собственный сценарий оболочки с собственными кодами возврата.

Исполнительный ('./script.sh ', $вывод,$код выхода)

Помните, что php-скрипт должен иметь разрешения для файлов и каталогов.

 2
Author: Scony, 2013-11-09 00:37:06