gpt4 book ai didi

c++ - 在线法官的测试环境

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:32 26 4
gpt4 key购买 nike

我计划在 CodeChef、TechGig 等线上构建一个在线法官。最初,我将只接受 C/C++ 中的解决方案。

已经考虑过相同的安全模型,但目前我关心的是如何为执行和测试部分建模。

方法一

目前比较流行的方法是将标准输入重定向到可执行文件,将标准输出重定向到文件,例如:

./submission.exe < input.txt > output.txt

然后将 output.txt 文件与一些 solution.txt 文件逐字符进行比较并报告结果。

方法二

我看到的第二种方法是不允许用户编写 main()。相反,编写一个函数以字符串形式接受一些参数并将全局变量设置为输出。例如:

//This variable should be set before returning from submissionAlgorithm()
char * output;

void submissionAlgorithm(char * input1, char * input2)
{
//Write your code here.
}

在每一步,为了执行一个测试用例,函数 submissionAlgorithm() 被重复调用,并检查输出变量的结果。

通过初步分析,我发现方法 2 不仅安全(我会阻止提交的代码对文件系统的所有读写访问),而且还可以加快测试用例的执行速度(也许?),因为测试结果的计算将发生在内存中。

我想知道是否有任何理由说明为什么方法 1 优于方法 2。

P.S:当然,我会在 Linux 服务器上托管在线判断引擎。

最佳答案

不要误解这一点,但您需要从更高的角度来看待安全性。问题不会是输入和输出被写入文件,也不应该对性能产生太大影响。但是您将需要管理实际上可以取消您的进程(在第二种情况下)或整个系统(调用操作系统写入磁盘,获取太多内存......)的提交。

免责声明我绝不是安全专家。

关于c++ - 在线法官的测试环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com