我正在编写一个Ruby代码,它生成一个包含C ++程序的字符串。例如,Ruby字符串可能包含:
#include <iostream>
using namespace std;int main(){cout<<"Hello World"<<endl;return 0;}
为了运行存储在Ruby字符串中的C ++程序,我将字符串写入名为c_prog.cpp的文件中,然后使用:
%x( g++ c_prog.cpp -o output )
在文件中编译C ++程序,然后使用:
value = %x( ./output )
然后打印该值。
由于存储在Ruby字符串中的C ++程序非常长(数千个LOC),因此将其写入文件会浪费一些时间。有没有什么办法可以编译存储在字符串中的程序而不将其写入文件?我的意思是:
%x( g++ 'the ruby string' -o output )
而不是:
%x( g++ c_prog.cpp -o output )
答案 0 :(得分:3)
您可以将单个短划线作为文件名传递,以告知g++
从STDIN读取。所以,
%x( echo 'the ruby string' | g++ -o output -x c++ - )
应该做的伎俩。请参阅this related question。
答案 1 :(得分:2)
您可以使用PTY
库直接管道进入g++
进程:
require 'pty'
m, s = PTY.open
r, w = IO.pipe
pid = spawn("g++ -o output -x c++ -", :in=>r, :out=>s)
r.close
s.close
w.puts "#include <iostream>\n int main(){std::cout << \"Hello World\" << std::endl;}"
w.close