C-如何在windows下,通过代码对程序完成编译

需求定制 需求定制 主题:1050 回复:2283

C-如何在windows下,通过代码对程序完成编译

夜无邪 发布于 2017-01-18 字数 1223 浏览 1236 回复 2

小弟最近在编写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等代码均可

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

偏爱自由 2017-04-21 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消息)
    如果只是想得到程序执行完成的时间,那就在程序启动前得到一下时间,执行后再得到时间,两相减就知道了。
瑾兮 2017-01-31 1 楼

@echo off
if "%CFG%"=="" set CFG=Debug

rem MAKE后面必须有空格

if "%make%"=="" set make=MAKE
if "%msdevapp%"=="" set msdevapp=msdev
%msdevapp% xxxDir/dspname.dsp