# aus Programm Unix/Linux befehle ausführen und Ergebnisse einlesen



## Navigato (23. September 2004)

Hi,

wie kann ich aus einem C/C++ Programm welches unter Unix laufen soll einen Systembefehl (ps -e) absetzen und dann das Ergebinss in eine Variable einlesen

Gruß
Navigato


----------



## Daniel Toplak (23. September 2004)

Entweder mit "system()", "exec()" oder "fork()" solltest du Glück haben.

Gruß Homer


----------



## RedWing (23. September 2004)

Da aber system(),exec()/fork() nur den Befehlrückgabewert/ die PID es Kindprozesses  als
ergebniss zurückgibt müsstest du dein Ergebniss z.B. in ein File einlesen via 
ps -e > ps.txt und dieses dann in deinem C++ Programm auslesen.

Gruß

RedWing


----------



## Daniel Toplak (23. September 2004)

Evtl. besteht auch die Möglichkeit stdin, stderr, stdout umzuleiten für den Kindprozess (das geht jedenfalls bei Windows), aber ob das bei UNIX auch geht weiß ich nicht.

Gruß Homer


----------



## squeaker (23. September 2004)

Ich glaube das gab es schon immer bei UNIX.


----------



## Rene Albrecht (24. September 2004)

Dann schreib doch mal einer WIE!  *Ich würd das auch gern wissen...*


----------



## Fabian H (24. September 2004)

Hi,

schau dir mal die Funktion popen an.
Benutzt sich wie _fopen_:

```
FILE *proc;
char buf[256];

if ((proc = popen("/bin/ls", "r")) == NULL) {
	fprintf(stderr, "Fehler\n");
	return 1;
}

while (!feof(proc)) {
	fgets(buf, 255, proc);
	printf("ls output: %s", buf);
}

pclose(proc);
```


----------



## canuzzi (26. September 2004)

*Alternative*

Als Alternative zu  dem Systembefehl kannst du auch das virtuelle /proc Verzeichniss auslesen, dasz letztendlich auch direkt dafuer gedacht ist, Informationen an Programme weiterzugeben, ohne jetzt ps & Co auszugeben.


----------

