2016-06-30 75 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中工作。感謝接受,我認爲它是我的第一! –