gnuplot aus C Programm heraus aufrufen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

gnuplot aus C Programm heraus aufrufen

Beitrag von BeS » 21.11.2003 23:17:16

Hallo,
ich habe ein C Programm welches ein paar Daten sammelt und auswertet, ich will diese Daten jetzt grafisch in einem Diagramm darstellen.
Ich dachte mir ich nehme gnuplot dazu, die Frage ist nur wie ich das jetzt am besten umsetze?
Meine erste Idee wäre diese:
- Im Programmverzeichnis noch ein script speicher das gnuplot steuert
- Wenn im Programm die grafische Darstellung gewählt wird die Daten in eine Datei in /tmp schreiben
- danach mit dem system() Befehl gnuplot mit dem script und der Datendatei aufrufen.

Was meint ihr dazu? Ist das ein guter/brauchbarer Ansatz, oder gibt es bessere Möglichkeiten? Ich bin derzeit etwas unsicher, da ich sowas noch nie gemacht habe.

Danke!
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Beitrag von Olaf Dietsche » 21.11.2003 23:29:43

Du kannst auch popen() benutzen. Dann mußt du deine Daten nicht auf die Platte schreiben, sondern kannst sie direkt an gnuplot schicken.

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 22.11.2003 12:05:32

Hallo,
Olaf Dietsche hat geschrieben:Du kannst auch popen() benutzen. Dann mußt du deine Daten nicht auf die Platte schreiben, sondern kannst sie direkt an gnuplot schicken.
Ich werde mich mal mit popen() etwas beschäftigen, sieht aber ganz interessant aus, und mich dann nochmal mit einer Erfolgsmeldung oder zusätzlichen Fragen melden :)
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 22.11.2003 16:54:56

Hallo,
so, ich habe jetzt mal etwas mit popen() herumgespielt.
Es funktioniert soweit auch ganz gut, nur ist das Problem das gnuplot gestartet und gleich wieder beendet wird. Das Fenster mit dem Graph sollte aber so lange offen sein bis es der Benutzer wieder schließt.

Mein Testprogramm sieht derzeit so aus:

Code: Alles auswählen

  FILE *fp;

  if ((fp = popen("gnuplot", "w")) == NULL)
    error("Fehler!");

  fprintf(fp, "plot sin(x)\n");
  fflush(fp);
Wie kann ich dafür sorgen das die Ausgabe von gnuplot offen bleibt?

Danke!

[EDIT]
Hat sich erledigt, ich habe eine gnuplot Option gefunden "--persist"
[/EDIT]
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 22.11.2003 23:36:47

Hallo,
jetzt habe ich nochmal eine Frage, die sich aber eher auf gnuplot bezieht.
Das mit popen funktioniert ja ganz gut solange ich eine Funktion ausgeben will, aber wie übergebe ich dem plot Befehl Datenpaare?
Ich habe da bisher nur die Möglichkeit gefunden indem ich eine Datei schreibe:
1 2
2 5
3 10
4 7
...

und dann plot mit der Datei als Argument aufrufe, aber ich wollte mit der popen() Funktion ja gerade das schreiben einer solchen datei umgehen.

Hat jemand einen Tip wie man datenpaare dem plot Befehl direkt mitgeben kann?

Danke!
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Beitrag von Olaf Dietsche » 23.11.2003 14:19:06

Wenn du als Dateinamen '-' angibst, kannst du die Daten direkt mit übergeben. Die Beschreibung findest du in

Code: Alles auswählen

info gnuplot
unter data-file und special-filenames.
Das sieht dann z.B. so aus

Code: Alles auswählen

plot '-', '-'
2
4
6
e
10
12
14
e

Antworten