OJ系统判题思路与代码实现
毕业设计做了个OJ系统,做得不好,打算重做,因为比较感兴趣,涉及到了许多东西,做系统的同时又把我在学校里学的东西给捡了回来,哈哈。
输入:
exeFile:源程序文件
codeType:代码类型
test.in:输入文件
test.out:输出文件
timeLimit:时间限制
memoryLimit:内存限制
输出:
exitValue:子进程运行结果状态码
runTime:子进程运行时间
runMemory:子进程运行内存
一些相关说明:
- 主进程:调控子进程的程序。
- 子进程:执行源程序。
- 管道:(有名管道)子进程输出数据到管道中,主进程得以读取,
半双工式环形缓冲区,半双工地读写决定了父/子只能有一个进程读/写,所以父子进程轮流阻塞。
(听说,有名管道环形缓冲,待验证,待审查对程序影响力。)
- fork()创建子进程
- setProcessLimit()自定义设定子进程资源限制函数,
包装修饰了setrlimit()库函数。
- 捕获Linux进程信号量(略)
- 获取进程PCB控制块信息(运行时间,内存...)
wait4(...)函数,PCB进程信息存在于调用wait4(...)函数传如的某个结构体引用中。