我是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磁盤,但前兩個是可能的? –