我将如何制作像键盘这样的网站?本质上,我希望能够在用户输入并输出成功或错误消息后编译 C 代码。如果成功,我将如何使用某些参数运行它?(这是一个编码竞赛网站)
问问题
125 次
1 回答
0
您可以使用反引号从 ruby 代码中调用 C 编译器。这是 Sinatra 的一个快速而肮脏的示例:
require 'sinatra'
# Display HTML form
get '/code' do
'<html><form method="post"><textarea name="code"></textarea><input type="submit" /></form></html>'
end
# Compile code
post '/code' do
exec = "gcc -x c -o tst - <<EOF\n#{params[:code]} \nEOF\n"
`#{exec}`
end
调用http://localhost:4567时,会出现一个表单,您可以在其中输入 C 代码。当您按下提交时,代码将被编译为tst
可执行文件。
然后,您可以使用反引号以tst
您想要的任何参数执行,类似于为编译过程本身所做的。
可以通过将反引号命令的结果存储在变量中来捕获标准输入输出,例如:
output = `tst`
可以通过重定向到 stdin 来捕获 stderr,例如:
output = `tst 2>&1`
注意:但是请小心,从安全的角度来看,这是非常危险的:任何人都可以提交任何 C 代码,并让它在您的服务器上编译和执行。
于 2011-02-18T20:41:10.123 回答