免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2081 | 回复: 2
打印 上一主题 下一主题

一个OJ项目中的难题(标准输入输出重定向) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-19 18:38 |只看该作者 |倒序浏览
我最近正在做一个OJ项目的后台的编译和测试的部分。
大体的思路是这样:首先,父进程编译代码。然后子进程运行编译过的程序。将它的标准输入输出重定向为文件。
这样当子进程结束时就可以检测标准输出重定向到的那个文件来确定程序的结果是否正确。
问题是现在测试数据有许多组,有的甚至高达1000组,这样每个提交的代码测试过程中都要读写2000个次:一个in文件中是所有的输入测试数据,首先读入第一组,将它写成一个新文件,然后将子进程标准输入重定向到这个文件,再将标准输出重定向到out.tmp
第二组测试数据时从in中读取第二组,再写一个新文件,输出仍然重定向到out.tmp.最后用diff比较out.tmp和out.
如果完全相同则提交的代码正确。

标准输出这样重定向没有问题,现在的问题是标准输入那样的话,效率太低下了。
如果只打开in文件直接从中读取的话,安全性可能不太高,并且提交的代码用的都是标准C的缓冲读取函数,
所以第一个子进程读了之后,第二个子进程读到的不是正确的数据。这个方法不可行。

请问有什么可以别的方法可以提高效率,不用这么多次的读写文件?

论坛徽章:
0
2 [报告]
发表于 2009-06-20 01:34 |只看该作者
土问下,OJ的全写是啥?OPENJAVA?

论坛徽章:
0
3 [报告]
发表于 2009-06-26 22:52 |只看该作者
使用tmpfs(内存虚拟文件系统)就可以啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP