Difference between revisions of "Программы-интеракторы"
(→Запуск программы-интерактора) |
|||
(One intermediate revision by the same user not shown) | |||
Line 32: | Line 32: | ||
* путь к файлу с правильным ответом. | * путь к файлу с правильным ответом. | ||
* идентификатор процесса (PID) тестируемой программы (с версии [[изменения в версии 3.0|3.0]]). | * идентификатор процесса (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</tt> устанавливается в 1 (с версии [[изменения в версии 2.3.28|2.3.28]]). | ||
Line 38: | Line 39: | ||
Переменная окружения <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_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]]). | ||
=== Результат работы программы-интеракторы === | === Результат работы программы-интеракторы === |
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.