Redirect output von einem Befehl (linux)

Fridulin

Erfahrenes Mitglied
Hallo Leute,

ich möchte gerne einen Befehl ausführen in Linux und die ausgabe in meinem c++ Programm verarbeiten. Genau gesagt geht es um festzustellen wieviele Festplatten der PC besitzt.
Code:
cat /proc/partitions
Mit den Befehl möchte ich dies gerne abfragen. Eine Möglichkeit wäre natürlich die umleitung in einer Datei und dann diese Datei einlesen. Aber es wäre mir anders schon lieber und auch "sauberer" finde ich.
In .NET war dies schon einfach mit System.Diagnostics.Process, ich hoffe sowas vergleichbares gibt es dort auch.

Viele Grüße und besten Dank schon einmal im vorraus.
Fridulin
 
Hallo,

vielen Dank für die Antwort.

Oh das es eine Datei ist auf den Gedanken bin ich ehrlich gesagt noch nicht gekommen..... Aber es wäre trotzdem noch schön zu wissen vielleicht für den ein oder anderen Befehl/Programm zu wissen wie man ein Rediect macht.

Viele Grüße, ich wünsche noch einen schönen Abend.
Fridulin

Edit: Ich habe es jetzt geschaft den Output umzuleiten.
Code:
FILE *befehl;
char temp[100];
befehl = popen("cat /proc/partitions", "r");

while(fgets(temp, 100, prc))
{
printf("$s\n", temp);
}

Viele Grüße und eine gute Nacht wünsche ich.
Fridulin
 
Zuletzt bearbeitet:
Hi.
Oh das es eine Datei ist auf den Gedanken bin ich ehrlich gesagt noch nicht gekommen.....
Aber es ist unter Linux/Unix doch alles eine Datei: TV Karten, Festplatten, Partitionen usw. werden alle als Dateien im Dateisystem abgebildet. Und das /proc Dateisystem enthält natürlich auch Dateien. ;-)

Edit: Ich habe es jetzt geschaft den Output umzuleiten.
Nicht vergessen die Pipe ordentlich mit pclose() wieder zu schliessen.

Gruß
 
Hallo,

ich muß gestehen ich bin noch ziehmlich unerfahren auf dem Gebiet Linux. So habe ich wieder was dazu gelernt.

Ich bräuchte noch einmal deine/eure hilfe. Ich habe möchte die erkannten Festplatten nun mounten. Die kalppt auch, aber er gibt wieder die Standart ausgabe in der Console und sie wird nicht umgeleitet.

Hat jemand eine Idee warum der Code bei cat funktioniert, nur nicht bei mount oder mkdir?

Code:
char temp [100];
FILE *befehl;
string mountbefehlfat32 = "mount -t fat32 /dev/" + welche + " mnt/" + welche; // wobei welche für z.B. sda1 steht.

befehl = popen(mountbefehlfat32.c_str(), "r");
//... und dann mit While das abfragen, wie in mein geposteten Beispiel

Mit den Code schreibt er direkt in der Console Nur "root" kann dies tun, nur ich möchte das eben, wie gesagt, gerne in mein Programm umleiten lassen...

Über jede Idee wäre ich sehr dankbar.

Viele Grüße
Fridulin
 
Hi.

Fehlerausgaben werden auf die Standarderrorausgabe (stderr) geschrieben. Die Pipe ist nur mit der Standardausgabe (stdout) des aufgerufenen Befehls verbunden.

Da das Programm aber mit /bin/sh -c "<cmd>" aufgerufen wird, könntest du mit Hilfe der Shell stderr auf stdout umleiten:
C++:
string mountbefehlfat32 = "mount -t fat32 /dev/" + welche + " mnt/" + welche + " 2>&1";

Wenn das nicht funktioniert müßtest du selbst mit pipe() und fork() arbeiten.

Gruß
 
Zuletzt bearbeitet:
Hallo,

achso dann werden normalerweise Fehler und normale Ausgaben von einander getrennt, wenn ich dich richtig verstehe.

Dein Befehl hat wunderbar geklappt, auch wenn ich ehrlich gesagt nicht 100% da den "Durchblick" habe. Ich werde versuchen mich dort ein wenig "schlauer" zu machen.

Besten Dank, ich wünsche noch einen schönen Nachmittag.
Fridulin
 
Zurück