我目前正在开展一个大学项目,用户在表单中输入C代码,并期望在浏览器中输出。我正在使用rails进行这个项目。 这是我的表格的代码
<%= form_tag({action: :show}, {method: :get}) do %>
Comment: <%= text_area_tag(:comment, nil, :rows => 5, :cols => 15) %>
<%= submit_tag ("Save data") %>
<% end %>
我从以下代码访问了我的控制器中的代码并将其保存到本地文件
@code_from_form = params['comment']
path = "/home/User/test.c"
content = @code_from_form
File.open(path, "w+") do |f|
f.write(content)
我已在论坛中阅读过运行文件
system cc program.c
我把它包含在我的控制器中但是我得到以下错误“undefined method`cc'”
我已将以下gem添加到myGemFile
gem 'RubyInline'
并在我的控制器中包含以下代码。
inline do |builder|
builder.c_singleton '
int testfunc() {
return 0;
}'
end
p testfunc
我收到以下错误
undefined method `inline' for #<ChallengesController
我应该在C中使用CGI脚本吗?
答案 0 :(得分:0)
system
方法调用可以作为字符串传递的系统程序。
如果命令为退出状态为零,则system
返回true
,非零退出状态为false
。如果命令执行失败,则返回nil
。如果您尝试执行的程序不存在,system
将返回nil
。
当你写:
system "cc program.c"
您正在输入文件cc
上执行program.c
程序。在这里,我怀疑运行Ruby脚本的计算机上没有安装cc
。在linux / unix上cc
代表C编译器,通常与Gnu C编译器gcc
一起安装。尝试安装gcc
。
编辑:
因为你想要的是向用户显示程序的输出,然后你必须执行编译的程序并收集它的输出。默认情况下,cc program.c
在当前目录中创建一个名为a.out
的可执行文件,以执行它并获取其输出:
output = `./a.out`
如果用反引号包围程序,它将被执行,就好像你用system
运行它一样,并且它也会将其输出作为字符串返回。