无法在rails中执行C代码

时间:2015-06-24 11:29:10

标签: ruby-on-rails ruby

我目前正在开展一个大学项目,用户在表单中输入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脚本吗?

1 个答案:

答案 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运行它一样,并且它也会将其输出作为字符串返回。