ユーザーによって送信された cpp コードがあります。データベースには入力ファイルと出力ファイルもあります。私が持っている入力ファイルと出力ファイルでこのcppコードをコンパイルして実行するにはどうすればよいですか。
さらに、上記のコードの実行の実行時間とメモリ消費を制限するにはどうすればよいですか。また、メモリの量と上記のコードの実行にかかった時間を測定するにはどうすればよいですか。
編集私はこれを以下のハックで動作させました。唯一の問題は、実行中のプログラムのメモリ使用量をどのように制限するかです。OSに依存しないものであれば幸いです。ただし、Windows と Linux の両方で解決できない場合は大歓迎です。
「タイムアウト」が必要
runDir = 'run\\'
def code_file( sid )
return "#{sid}.cpp"
end
def executable_file( sid )
return "#{sid}.exe"
end
def input_file( sid )
return "#{sid}.in"
end
def output_file( sid )
return "#{sid}.out"
end
def get_complie_command_line( sid , runDir)
return "g++ -w -O2 #{code_file(sid)} -o #{runDir}#{executable_file(sid)}"
end
def get_run_command_line( sid , runDir )
return "#{runDir}#{executable_file(sid)} < #{sid}.in"
end
def run_submission( sid , runDir )
begin
timeout(5) {
run_cmd_line = get_run_command_line( 1 , runDir)
puts run_cmd_line
runOutput = %x[#{run_cmd_line}]
puts runOutput
}
puts "Timeout didn't occur"
rescue Timeout::Error
puts "Timed out!"
end
end
def compile( sid , runDir )
#make the directory
%x[mkdir #{runDir}]
#get compile command line and produce the exe
cmd_line = get_complie_command_line( 1 , runDir)
puts cmd_line
compile_error = %x[#{cmd_line}].to_s.strip
#run the code
if compile_error.length != 0
puts "Compile Errors"
else
run_submission( 1 , runDir )
end
end
compile( 1 , runDir)