Компиляция c использованием ruby
Как мне сделать сайт похожим на кодовую панель? По сути, я хочу иметь возможность компилировать код C после того, как пользователь вводит и выводит сообщение об успехе или ошибке. Если он будет успешным, как я смогу запустить его с определенными параметрами? (Это для сайта конкурса кодирования)
1 ответ
Вы можете вызвать компилятор C из кода ruby, используя обратные ссылки. Вот быстрый и грязный пример с Синатрой:
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
с любыми параметрами, которые вы хотите, аналогично тому, что делается для самого процесса компиляции.
Вывод stdin может быть записан путем сохранения результата команды backtick в переменной, например:
output = `tst`
stderr может быть перехвачен путем перенаправления на stdin, например:
output = `tst 2>&1`
NB: Пожалуйста, будьте осторожны, хотя, с точки зрения безопасности, это очень и очень опасно: любой может отправить любой код C и заставить его скомпилировать и выполнить на вашем сервере.