2016-06-30 37 views
2

我是C++的初学者。假设我有一个输出函数的C++程序,例如f(x)=x*x,我需要它评估和打印。这可以在代码中轻松完成。C++,Gnuplot:在RAM中创建临时文件并在Gnuplot中使用它

是否可以创建一个临时文件,并在RAM中评估结果?如在,它将是一个std::vector,最有可能的,所以它会驻留在堆(不是?)。

那么,是否可以使用system()(或代码中的任何内容)从内存中调用gnuplot

而且,作为最后的想法,这两者可以在没有外部虚拟RAM磁盘的情况下完成吗?

+0

如果没有使用外部虚拟RAM磁盘,则无法进行描述 – GMichael

+0

除非操作允许您快速创建某种RAM磁盘,否则您不能这样做。但是,在正常的已挂载磁盘或文件系统上使用临时文件(如POSIX系统上的“/ tmp”)有什么问题? GNUplot文件通常比较小,编写这样的文件不会是瓶颈。此外,现在当SSD很常见时,写入速度更快,如果您拥有大量内存,临时目录可能已经是RAM磁盘。 –

+0

@GMichael那么,唯一的办法是创建一个虚拟RAM磁盘,但前两个是可能的? –

回答

1

所以在Linux下使用的管道,你可以做以下的第一个例子:

cat data.txt | gnuplot -p -e "plot '-' w l" 

其中data.txt中是一个两列的文件。相反,该文件,你可以让你的程序产生一些数据,你可以对gnuplot的添加一个额外的设置,使其稍微有点复杂:

./program | gnuplot -p -e "set ylabel 'E'; plot '-' w l" 

现在这是你所需要的。请注意0​​= persistent,-e =交互式(?)和命令之间的分号(;)是必需的。类似的东西可能在Windows中工作。我希望这有助于。

额外的东西:如果你有很多的设置,你可以把它们放在一个文件,例如:

$ cat settings.txt 
set logs; 
set ylabel "hejsan"; 
set xlabel "energy"; 
plot '-' w l 

然后:

./program | gnuplot -p -e "$(<settings.txt)" 

不要错过任何符号"$(<filename)"!这可能只适用于Linux中的Bash shell。您可以尝试cygwin环境。或者只是安装Ubuntu。

一周

编辑后

如果你想这样做,以节省您的SSD,它当然不会伤害,但可能并不重要。 SSD具有智能管理功能,因此不会每次都写入相同的物理段。该文件将“移动”,并且它们可以持续数百TB的价值。

+0

谢谢你的回答,我有archlinux x64,我也会在Windows中尝试这个,但现在不行。它当然看起来像一个有效的选择。我会将其标记为答案。 –

+0

好,那么它应该在Arch中工作。感谢接受,我认为它是我的第一! –