PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Systembefehl in Variable speichern



Suffkopf
11-11-2004, 16:05
Dieser Systembefehl gibt mir eine Zahl aus. Nur wie speicher ich ihn in eine Variable ?

system("egrep LOCALMSN /etc/isdn/device.ippp0 | awk '{ print $1 }' | cut -b 10-20");

Es müsste doch eigendlich eine int Variable sein aber dann bekomme ich immer nur 0 raus und nicht die Zahl die der Systembefehl raus gibt.

pik7
11-11-2004, 16:13
hallo,

probier mal popen

gruß

ContainerDriver
11-11-2004, 18:05
Hallo,
system() liefert nicht die Programmausgabe zurück, sondern den Exitcode des ausgeführten Programms, bzw. andere Werte, die in "man system" aufgelistet sind.

Gruß, FLorian

7.e.Q
12-11-2004, 09:51
popen macht spars (Rächtschraibunk wägen den Sinnwarung fervelscht ;) Sonst wär's halt nicht so komisch :D :P)



popen() verwendet man wie eine Datei, die man mit FILE* fopen öffnen kann:

edit... hab mal deinen Befehl da eingefügt... sieht besser aus.


FILE* fpsxreturn=popen("egrep LOCALMSN /etc/isdn/device.ippp0 | awk '{ print $1 }' | cut -b 10-20","r");
if(fpsxreturn!=NULL)
{
while(fgets(psxiobuf,sizeof(psxiobuf),fpsxreturn))
{
printf("Zeile: %s",psxiobuf);
}
fclose(fpsxreturn);
}


... liefert dir die Ausgabe des Befehls 'egrep LOCALMSN /etc/isdn/device.ippp0 | awk '{ print $1 }' | cut -b 10-20'.

Suffkopf
13-11-2004, 15:55
Was ist denn psxiobuf ? Wenn es eine Varibal ist dann müsste ich wissen was für eine und was macht das "r" hinter dem Befehl ?

Eigendlich müsste ich das alles mal erklärt bekommen, denn in den Manpages versteh ich nur bahnhof.

ContainerDriver
13-11-2004, 17:44
Hallo.
Schau mal in die man-page von popen (zu dem "r"), da ist das erklärt.
psxiobuf ist wohl ein char-Array (wg. %s bei printf() & der Verwendung bei fgets()).

Gruß, Florian

EDIT: Entschuldigung, ich habe deinen Betrag nicht ganz gelesen..also vergess den ersten Teil mit der man-page.
Das r steht für read, w für write (wie bei fopen()). Du bekommst auch bei popen nichts anderes zurück als wie bei fopen: nämlich einen I/O-Stream.
Im Klartext heißt das, dass du von dem "Strom" nur lesen kannst (was du dann auch mit fgets() machst), du kannst nichts hineinschreiben.

MikeG
14-11-2004, 14:02
Warum nicht exec*()? Damit bekommt man die Ausgaben hübsch in ein array geschrieben wieder, welches als Zeiger an die Funktion übergeben wird.

Ich weiß jetzt nicht ob es unter Linux gcc genauso ist wie mit dem MingW oder DJGPP, aber kannst Dir mal die Manpages zu exec ansehen:



#include <unistd.h>

int execl(const char *path, const char *argv0, ...);
int execle(const char *path, const char *argv0, ...
/*, char *const envp[] */);
int execlp(const char *path, const char *argv0, ...);
int execlpe(const char *path, const char *argv0, ...
/*, char *const envp[] */);

int execv(const char *path, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execvp(const char *path, char *const argv[]);
int execvpe(const char *path, char *const argv[], char *const envp[]);