C-如何在windows下,通过代码对程序完成编译
小弟最近在编写online judge分布式判题的后台
在linux系统下面,可以很简单的调用execl("gcc编译器路径","gcc","待编译程序路径 例如 test.c","-o","run.out")来完成编译
可以通过 fork 建立子进程 然后用一下方式卡内存,时间,输出等
getrlimit(RLIMIT_CPU, &limit_cpu);
limit_cpu.rlim_cur = cpuLimit;
//limit cpu time 1 second
setrlimit(RLIMIT_CPU, &limit_cpu);
getrlimit(RLIMIT_FSIZE, &limit_file);
limit_file.rlim_cur = limit_file.rlim_max = fileSizeLimit;
//limit output
setrlimit(RLIMIT_FSIZE, &limit_file);
getrlimit(RLIMIT_DATA, &limit_memory);
limit_memory.rlim_cur = limit_memory.rlim_max = memoryLimit;
//limit memory
setrlimit(RLIMIT_DATA, &limit_memory);
getrlimit(RLIMIT_STACK, &limit_stack);
limit_stack.rlim_cur = limit_stack.rlim_max = memoryLimit;
//limit stack
setrlimit(RLIMIT_STACK, &limit_stack);
问题:windows下如何实现?
但是以上只能对完成对gcc,g++,java,pascal的编译和判题,对于用vs或者在windows下写的c程序无法判题,所以希望这里有牛人可以告诉,如何用c/c++/java/c#任意代码实现,在windows系统下对原程序的编译和运行,运行包括内存限制,卡时,卡内存,c/c++/c#/java等代码均可
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
说说我想到的方法,看看对你有没有帮助
1. windows系统下对原程序的编译和运行 c/c++/c#/java等代码均可:
每种语言都有自己的编译器,你需要做的就是针对不同的语言调用不同的编译器去编译,在Windows程序中调用一个程序的执行还是很简单的,使用ShellExecute API就可以做到,包括传递参数等,但如果程序想得到编译过程中编译程序的输出信息的话,那么就不能是ShellExecute的方式了,需要自己创建一个进程加上使用通道的方式来得到输出结果。 网上搜索了一下,找了一个简单的Delphi的例子,你可以参考一下: http://topic.csdn.net/t/20030815/09/2148643.html
2. 运行包括内存限制,卡时,卡内存
针对Windows程序做内存限制,这个我不太了解,网上搜索了一下好像也没发现有这样的例子。限制时间的部分比较好处理,如果你是想时间到不管有没有执行完成就中止的话,可以使用API(如:TerminateProcess)把进程直接中止掉,也可以使用发送消息的方式来让进程中止(进程本身需要有处理消息机制)(如:WM_CLOSE消息)
如果只是想得到程序执行完成的时间,那就在程序启动前得到一下时间,执行后再得到时间,两相减就知道了。
@echo off
if "%CFG%"=="" set CFG=Debug
rem MAKE后面必须有空格
if "%make%"=="" set make=MAKE
if "%msdevapp%"=="" set msdevapp=msdev
%msdevapp% xxxDir/dspname.dsp