我是C++的初学者。假设我有一个输出函数的C++程序,例如f(x)=x*x
,我需要它评估和打印。这可以在代码中轻松完成。C++,Gnuplot:在RAM中创建临时文件并在Gnuplot中使用它
是否可以创建一个临时文件,并在RAM中评估结果?如在,它将是一个std::vector
,最有可能的,所以它会驻留在堆(不是?)。
那么,是否可以使用system()
(或代码中的任何内容)从内存中调用gnuplot
?
而且,作为最后的想法,这两者可以在没有外部虚拟RAM磁盘的情况下完成吗?
我是C++的初学者。假设我有一个输出函数的C++程序,例如f(x)=x*x
,我需要它评估和打印。这可以在代码中轻松完成。C++,Gnuplot:在RAM中创建临时文件并在Gnuplot中使用它
是否可以创建一个临时文件,并在RAM中评估结果?如在,它将是一个std::vector
,最有可能的,所以它会驻留在堆(不是?)。
那么,是否可以使用system()
(或代码中的任何内容)从内存中调用gnuplot
?
而且,作为最后的想法,这两者可以在没有外部虚拟RAM磁盘的情况下完成吗?
所以在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的价值。
谢谢你的回答,我有archlinux x64,我也会在Windows中尝试这个,但现在不行。它当然看起来像一个有效的选择。我会将其标记为答案。 –
好,那么它应该在Arch中工作。感谢接受,我认为它是我的第一! –
如果没有使用外部虚拟RAM磁盘,则无法进行描述 – GMichael
除非操作允许您快速创建某种RAM磁盘,否则您不能这样做。但是,在正常的已挂载磁盘或文件系统上使用临时文件(如POSIX系统上的“/ tmp”)有什么问题? GNUplot文件通常比较小,编写这样的文件不会是瓶颈。此外,现在当SSD很常见时,写入速度更快,如果您拥有大量内存,临时目录可能已经是RAM磁盘。 –
@GMichael那么,唯一的办法是创建一个虚拟RAM磁盘,但前两个是可能的? –