创新实训(5)- 评测端架构
源码分析
代码分析
- data 是存储测试数据和配置文件的目录,其中包含解压后的文件和压缩包(作为备份)
- include 是测试相关的工具方法,
- result 暂存评测结果
- work 正在评测的题目包含的数据,每当有评测请求时,将所有测试数据拷贝到对应文件目录中
当有评测任务来到时,补全地址,使用系统调用将 data 拷到 work 目录:
也可以添加多台评测机,做到分布式评测。具体修改 config.json
评测使用了 testlib.h 支持
run 目录下的 formatter.cpp 用于将测试数据格式化,防止行末回车等问题产生的影响,run_program.cpp 则是一个简易的沙箱实现,具体内容我单开一节介绍
uoj_judger.h 是一个评测系统(judger)的部分实现
分为多个部分,execute 用于执行代码,
file 用于预览和隐藏文件
parameter 部分,用于修改参数:
配置部分:
执行部分:
该部分逻辑较为复杂,大致思路仍然是设置需要的参数和限制、约束条件,然后使用系统调用来执行用户提交的代码。
特别需要注意,交互题在这部分限制下会麻烦很多