Difference between revisions of "Программы-интеракторы"

From EjudgeWiki
 
(Запуск программы-интерактора)
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Программы-интеракторы]]
+
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Программы-интеракторы]]
 +
 
 +
Программа-интерактор является необходимой для поддержки [[Задача:interactive|интерактивных задач]]. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора.
 +
 
 +
=== Настройки в конфигурационных файлах ===
 +
 
 +
Для интерактивных задач должна быть установлена конфигурационная переменная <tt>interactor_cmd</tt> раздела описания задачи. Пример раздела описания задачи дан ниже.
 +
 
 +
[problem]
 +
super = "Generic"
 +
short_name = "C"
 +
long_name = "Sum 3"
 +
standard_checker = "cmp_int_seq"
 +
interactor_cmd = "interactor_C"
 +
 
 +
Конфигурационная переменная <tt>interactor_cmd</tt> наследуется из абстрактных задач, и для нее выполняются форматные подстановки, поэтому, интерактор может быть определен и следующим образом:
 +
 
 +
interactor_cmd = "interactor_%Ps"
 +
 
 +
По умолчанию программы-интеракторы должны размещаться в том же каталоге, где и проверяющие программы, то есть в каталоге <tt>checkers</tt> корневого каталога турнира.
 +
 
 +
При необходимости программе-интерактору могут передаваться дополнительные переменные окружения. Дополнительные переменные окружения определяются с помощью конфигурационной переменной <tt>interactor_env</tt>, например, следующим образом:
 +
 
 +
interactor_env = "VAR1=val1"
 +
interactor_env = "VAR2=val2"
 +
 
 +
=== Запуск программы-интерактора ===
 +
 
 +
Программа интерактор запускается параллельно с тестируемой программой. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора с помощью неименованных каналов (pipe). Стандартный поток ошибок сохраняется в файл и в последующем добавляется в протокол проверки. Программе-интерактору передаются три аргумента командной строки:
 +
* путь к файлу с входными тестовыми данными (должен открываться только на чтение);
 +
* путь к файлу, в который программа-интерактор выводит протокол взаимодействия для последующей проверки проверяющей программой (должен открываться на запись);
 +
* путь к файлу с правильным ответом.
 +
* идентификатор процесса (PID) тестируемой программы (с версии [[изменения в версии 3.0|3.0]]).
 +
* путь к .inf-файлу для теста, если установлен флаг <tt>[[serve.cfg:problem:use_info|use_info]]</tt> (с версии [[изменения в версии 3.6.1|3.6.1]]).
 +
 
 +
Переменная окружения <tt>EJUDGE</tt> устанавливается в 1 (с версии [[изменения в версии 2.3.28|2.3.28]]).
 +
 
 +
Переменная окружения <tt>EJUDGE_LOCALE</tt> устанавливается в значение конфигурационной переменной <tt>[[serve.cfg:global:checker_locale|checker_locale]]</tt>, ели она установлена (с версии [[изменения в версии 2.3.28|2.3.28]]).
 +
 
 +
Переменная окружения <tt>EJUDGE_SUID_RUN</tt> устанавливается в 1, если у тестируемой задачи установлен флаг <tt>[[serve.cfg:problem:enable_suid_run|enable_suid_run]]</tt> (с версии [[изменения в версии 3.6.1|3.6.1]]).
 +
 
 +
Переменная окружения <tt>EJUDGE_TESTLIB_MODE</tt> устанавливается в 1, если у тестируемой задачи установлен флаг <tt>[[serve.cfg:problem:enable_testlib_mode|enable_testlib_mode]]</tt> (с версии [[изменения в версии 3.6.1|3.6.1]]).
 +
 
 +
=== Результат работы программы-интеракторы ===
 +
 
 +
Программа-интерактор должна завершать работу как только получает признак конца файла на стандартном потоке ввода. Если признак конца ввода не обрабатывается, возможна ситуация тупика. Программа интерактор должна возвращать коды завершения 0, 4 или 5, как и проверяющая программа.
 +
* код завершения 0 означает, что интерактор не обнаружил нарушений протокола взаимодействия или явного ошибочного вывода тестируемой программы. Протокол взаимодействия, сохраненный интерактором в файле, путь к которому передан в аргументах командной строки, будет проверен проверяющей программой.
 +
* код завершения 4 приводит к диагностике presentation error.
 +
* код завершения 5 приводит к диагностике wrong answer.

Latest revision as of 03:32, 11 April 2017

Навигация: Главная страница/Система ejudge/Использование/Программы-интеракторы

Программа-интерактор является необходимой для поддержки интерактивных задач. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора.

Настройки в конфигурационных файлах

Для интерактивных задач должна быть установлена конфигурационная переменная interactor_cmd раздела описания задачи. Пример раздела описания задачи дан ниже.

[problem]
super = "Generic"
short_name = "C"
long_name = "Sum 3"
standard_checker = "cmp_int_seq"
interactor_cmd = "interactor_C"

Конфигурационная переменная interactor_cmd наследуется из абстрактных задач, и для нее выполняются форматные подстановки, поэтому, интерактор может быть определен и следующим образом:

interactor_cmd = "interactor_%Ps"

По умолчанию программы-интеракторы должны размещаться в том же каталоге, где и проверяющие программы, то есть в каталоге checkers корневого каталога турнира.

При необходимости программе-интерактору могут передаваться дополнительные переменные окружения. Дополнительные переменные окружения определяются с помощью конфигурационной переменной interactor_env, например, следующим образом:

interactor_env = "VAR1=val1"
interactor_env = "VAR2=val2"

Запуск программы-интерактора

Программа интерактор запускается параллельно с тестируемой программой. Стандартный вывод программы-интерактора соединяется со стандартным вводом тестируемой программы, а стандартный вывод тестируемой программы - со стандартным вводом программы-интерактора с помощью неименованных каналов (pipe). Стандартный поток ошибок сохраняется в файл и в последующем добавляется в протокол проверки. Программе-интерактору передаются три аргумента командной строки:

  • путь к файлу с входными тестовыми данными (должен открываться только на чтение);
  • путь к файлу, в который программа-интерактор выводит протокол взаимодействия для последующей проверки проверяющей программой (должен открываться на запись);
  • путь к файлу с правильным ответом.
  • идентификатор процесса (PID) тестируемой программы (с версии 3.0).
  • путь к .inf-файлу для теста, если установлен флаг use_info (с версии 3.6.1).

Переменная окружения EJUDGE устанавливается в 1 (с версии 2.3.28).

Переменная окружения EJUDGE_LOCALE устанавливается в значение конфигурационной переменной checker_locale, ели она установлена (с версии 2.3.28).

Переменная окружения EJUDGE_SUID_RUN устанавливается в 1, если у тестируемой задачи установлен флаг enable_suid_run (с версии 3.6.1).

Переменная окружения EJUDGE_TESTLIB_MODE устанавливается в 1, если у тестируемой задачи установлен флаг enable_testlib_mode (с версии 3.6.1).

Результат работы программы-интеракторы

Программа-интерактор должна завершать работу как только получает признак конца файла на стандартном потоке ввода. Если признак конца ввода не обрабатывается, возможна ситуация тупика. Программа интерактор должна возвращать коды завершения 0, 4 или 5, как и проверяющая программа.

  • код завершения 0 означает, что интерактор не обнаружил нарушений протокола взаимодействия или явного ошибочного вывода тестируемой программы. Протокол взаимодействия, сохраненный интерактором в файле, путь к которому передан в аргументах командной строки, будет проверен проверяющей программой.
  • код завершения 4 приводит к диагностике presentation error.
  • код завершения 5 приводит к диагностике wrong answer.