Forum: PC-Programmierung C popen / pclose


von M. M. (karlkappe)


Lesenswert?

Hallo Zusammen,

ich habe mir eine kleine Funktiongebastelt, die einen hübschen 2D Plot 
macht.
1
int plot(char *col, char *dfile, char *gfile)
2
{
3
4
    FILE *pipe = popen("gnuplot -persist","w");
5
    fprintf(pipe, "set term png\n");
6
    fprintf(pipe, "set output '%s'\n", gfile);
7
    fprintf(pipe, "set pm3d map\n");
8
    fprintf(pipe, "set size ratio 1\n");
9
    fprintf(pipe, "set xrange [0:%i]\n", xdim-1);
10
    fprintf(pipe, "set yrange [0:%i]\n", ydim-1);
11
    fprintf(pipe, "set xtics 0\n");
12
    fprintf(pipe, "set ytics 0\n");
13
    fprintf(pipe, "set palette model %s\n", col);
14
    fprintf(pipe, "unset colorbox\n");
15
    fprintf(pipe, "splot '%s' matrix using 1:2:3 notitle", dfile);
16
17
    pclose(pipe);
18
    return 0;
19
}
Das Problem ist es funktioniert einwandfrei ich bekomme aber trotzdem 
ständig Warnungen obwohl ich die stdio.h eingebunden habe. Weiß jemand 
warum?

warning: implicit declaration of function ‘popen’
warning: assignment makes pointer from integer without a cast
warning: implicit declaration of function ‘pclose’

Zweite Frage auf meinem Linux läuft das tadellos aber kann man das auch 
auf Windows exportieren?

Gruß

von Klaus W. (mfgkw)


Lesenswert?

Genaue und korrekte Meldungen und vollständiger Quelltexten wären immer 
hilfreich...

Hier wird wohl zumindest die Headerdatei eingebunden werden müssen
(#include...), in der popen() und pclose() deklariert sind.

von Matthias (Gast)


Lesenswert?

Veruschs mal mit "pthread.h".

von Klaus W. (mfgkw)


Lesenswert?

bzw. #include <pthread.h>

von M. M. (karlkappe)


Lesenswert?

Das sind der include Block.
Tut aber nichts weiter zur Sache popen sollte in stdio.h drin sein. 
Zumindest laut Internet.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <math.h>
4
#include <string.h>
5
#include <stdlib.h>
6
#include <gtk/gtk.h>
7
#include <gdk/gdk.h>
8
#include <gtkextra/gtkextra.h>

Im main wird dann einfach die Funktion aufgerufen und fertig tut also 
auch nichts wirklich zur Sache beitragen oder?

Und die Warnings sind alles was ich bekomme, laufen tut es ja wie es 
soll. Nur wenn er warnings rausgibt kann sein das es halt nicht immer 
tut oder?

Klaus war schneller als ich hehe

von Klaus W. (mfgkw)


Lesenswert?

und wo siehst du da ein pthread.h?

von M. M. (karlkappe)


Lesenswert?

Aber #include <pthread.h> hilft auch nicht.
Du warst einfach zu schnell und bist mir dazwischen gekommen ;-)

von M. M. (karlkappe)


Lesenswert?

Da ist mir grad noch aufgefallen wenn ich:

gcc -Wall -ansi
mache habe ich die Warnungen

mit

gcc -Wall

nicht.

Das verwirrt mich ein wenig.

von Klaus W. (mfgkw)


Lesenswert?

lt. http://www.manpagez.com/man/3/popen/ sollte es in stdio.h deklariert 
sein.
Habe leider kein Linux vor der Nase, bzw. nur ein dummes Ubunte in einer 
VM ohne man-pages; kann es also nicht probieren.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

popen ist zwar in stdio.h definiert, ist aber keine ANSI C-Funktion, 
sondern etwas Unix-spezifisches.

von Klaus W. (mfgkw)


Lesenswert?

Die p... sind ja auch POSIX-Funktionen und nicht im ANSI-Standard.
Kann gut sein, daß in der stdio.h bei -ansi der POSIX-KRam stillgelegt 
wird.

von M. M. (karlkappe)


Lesenswert?

Danke das erklärt doch einiges.
Bleibt mein zweites Problem wie kann man das auf Windows übertragen?

von Klaus W. (mfgkw)


Lesenswert?


von M. M. (karlkappe)


Lesenswert?

Danke Klaus ich denke das hilft mir weiter.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.