我在搜索關於gnuplot的其他內容時遇到了這個問題。儘管這是一個老問題,但我認爲我會提供一些示例代碼。我將它用於我的一個程序,我認爲它的工作非常乾淨。 AFAIK,這個PIPEing只適用於Unix系統(請參閱下面的Windows用戶編輯)。我的gnuplot安裝是Ubuntu存儲庫的默認安裝。
#include <stdlib.h>
#include <stdio.h>
#define NUM_POINTS 5
#define NUM_COMMANDS 2
int main()
{
char * commandsForGnuplot[] = {"set title \"TITLEEEEE\"", "plot 'data.temp'"};
double xvals[NUM_POINTS] = {1.0, 2.0, 3.0, 4.0, 5.0};
double yvals[NUM_POINTS] = {5.0 ,3.0, 1.0, 3.0, 5.0};
FILE * temp = fopen("data.temp", "w");
/*Opens an interface that one can use to send commands as if they were typing into the
* gnuplot command line. "The -persistent" keeps the plot open even after your
* C program terminates.
*/
FILE * gnuplotPipe = popen ("gnuplot -persistent", "w");
int i;
for (i=0; i < NUM_POINTS; i++)
{
fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]); //Write the data to a temporary file
}
for (i=0; i < NUM_COMMANDS; i++)
{
fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]); //Send commands to gnuplot one by one.
}
return 0;
}
編輯
在我的申請,我也碰到了,該地塊沒有出現,直到調用程序被關閉的問題。要解決此問題,請在使用fprintf
向您發送最終命令後添加fflush(gnuplotPipe)
。
我也看到,Windows用戶可能會使用_popen
來代替popen
- 但我無法確認這一點,因爲我沒有安裝Windows。
編輯2
一種可避免具有通過發送gnuplot的所述plot '-'
命令,隨後的數據點後面跟有字母「E」寫入到一個文件中。
例如
fprintf(gnuplotPipe, "plot '-' \n");
int i;
for (int i = 0; i < NUM_POINTS; i++)
{
fprintf(gnuplotPipe, "%lf %lf\n", xvals[i], yvals[i]);
}
fprintf(gnuplotPipe, "e");
也許檢查出'system'功能。 – sje397 2010-08-19 11:23:28