您的位置:首页 > 编程语言 > C语言/C++

C++开源跨平台OJ系统判题核心—— FreeJudger(一)

2013-02-03 21:33 295 查看
C++开源跨平台OJ系统判题核心—— FreeJudger

By 马冬亮(凝霜  Loki)

一个人的战争(http://blog.csdn.net/MDL13412)

项目背景

本项目是为作者所在学校搭建OJ系统时衍生出来的一个项目,由于我的学弟、学妹们对Linux系统不熟悉,为了我们这批人毕业了以后,有人能维护OJ系统,因此选用了可以运行在Windows平台的开源OJ系统。

起初,我的一个同学用NOJ(南京航空航天大学的OJ)搭建起了我们协会最初版本的OJ,但是这套OJ系统的判题核心不开源,且安全性得不到保证,再加上其web界面实在是太难看,我的一位学长ZB选择hustoj做为协会的新一代OJ平台。hustoj最初被设计在Linux系统上运行,因此需要对其进行二次开发,经过验证,此OJ的移植工作主要集中在判题程序上。至此,作者ZB发起了FreeJudger开源项目,并希望藉由此项目,推动国内OJ的发展。

功能需求

崩溃自动重启;
支持并行/并发评判;
支持多种语言的评判;
能至少在Windows平台*nix平台运行;
支持安全沙箱功能(限制程序运行内存、运行时间、对系统的访问/更改等),保证系统安全。

系统架构



可执行程序

分为守护程序监控程序两部分组成,其中守护程序是运行在后台进行评判的核心,监控程序提供一个GUI界面供用户获取守护程序运行状态,并对其进行控制(无需一直运行,可以在需要时,连接到守护程序,支持远程访问)。

PlatformLayer

PlatformLayer用于屏蔽操作系统的细节,其组成及功能如下:
logger:日志库,目前使用log4cxx作为核心;
xml:配置文件解析库,目前使用RapidXML作为核心;
filetool:提供对系统文件的基本操作(创建、删除文件/文件夹,读取、写入文件),目前使用Boost.FileSystem作为核心;
process:提供对进程的封装,其接口为仿Linux风格,目前各平台采用原生系统调用实现;
thread:提供POSIX兼容的线程封装,目前使用Boost.Thread作为核心;
taskmanager:提供任务管理器,用于管理判题任务;
sql:提供对数据库的抽象,目前支持MySQL数据库的操作;
net:用于实现守护程序监控程序之间的通信;
windowsapihook:用于屏蔽掉Windows Job在一些Windows平台上弹出“应用程序错误”对话框的问题,使用微软Detours库实现。

系统软件支持

用于支撑判题程序。

操作系统

FreeJudger要支持的操作系统平台,至少要支持Windows*nix

项目组织

构建工具及IDE

Windows平台:VC++ 2010
Linux平台:Makefile + Vim
其他平台:Makefile

源码组织



目前正在进行Windows平台的开发,其说明如下:

Daemon文件夹:守护程序工程;
Test文件夹:用于临时测试代码的工程;
judgerlib文件夹:PlatformLayer层,每个模块一个工程;
thirdpartylib文件夹:用到的第三方库(需要编译的,在里面提供预先编译好的静态/动态库);
doc文件夹:项目文档;
Debug/Release文件夹:程序输出目录。

二级文件夹组织如下图所示:





项目主页

https://github.com/NsLib/FreeJudger

欢迎加入

群117975329,验证信息CSDN

主要维护人:

周宝    you_lan_hai@foxmail.com
马冬亮  mdl2009@vip.qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: