经过我许多的资料查找和编写,终于完成了ujudger-base的第一个版本!
ujudger 是我准备编写的基于 Linux 的测评程序,采用 GPL 协议。由于一直以来找不到 Linux 下的测评程序,因此准备自己写一个。ujudger 的 u 既是取我网名的第一个字母,也是 ubuntu 的第一个字母,表示这个程序应该会在 ubuntu 下完成编写。而 ujudger-base 是 ujudger 的基础程序,表现 ujudger 的测评核心,即耗时和内存耗用的取得。使用 time 命令和系统监视器监视器的资料对比一下,ujudger-base 获得的信息还是比较体现程序的真实情况的。
ujudger-base 并不复杂,不过也不简单(自少我这么觉得)。在编写的过程中,开始不知道 Linux 下的进程控制,后来知道了 fork() 函数。开始觉得很奇怪,后来也就慢慢明白了。不就是返回两次么,有什么了不起的~然后就是exec族的函数,成功了就不返回了_-b
然后就是等待的办法。网上有些人是直接用 wait4 快速返回来等待,但我觉得这样很影响速度,因此采用了 usleep 等待 100ms(有没有一点像 Cena 的方法?)。
同时,我还查找了有关程序运行数据读取的相关问题,最后采用的是读取 /proc/<pid>/stat 文件的方法。具体采用的一些技术层的资料我准备明天发一篇来讲。
除此之外就是几乎第一次大规模的采用 C++ 的推荐风格编写程序(以前写OI的程序,为了效率不得不放弃许多 C++ 优美的特性),因此有写丑的地方也请多多指教。
里面的注释很多了,由于我的英语水平有限(My English is limited!),如果注释有什么语法错误,也请多多指教!
点击这里下载源代码:ujudger-base-0.1.cpp (3.6 KB)
Comments