tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
2341
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Fridulin Fridulin ist offline Mitglied Brokat
    Registriert seit
    Dec 2004
    Beiträge
    309
    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 :
    1
    
    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
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    /proc/partitions ist doch eine Datei! Die kannst du einfach mit fopen öffnen und auslesen!

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Fridulin Fridulin ist offline Mitglied Brokat
    Registriert seit
    Dec 2004
    Beiträge
    309
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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
    Geändert von Fridulin (10.10.07 um 01:36 Uhr)
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Fridulin Beitrag anzeigen
    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.

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

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Fridulin Fridulin ist offline Mitglied Brokat
    Registriert seit
    Dec 2004
    Beiträge
    309
    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 :
    1
    2
    3
    4
    5
    6
    
    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
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    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:
    Code cpp:
    1
    
    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ß
    Geändert von deepthroat (11.10.07 um 14:22 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Fridulin Fridulin ist offline Mitglied Brokat
    Registriert seit
    Dec 2004
    Beiträge
    309
    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
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 20.04.10, 19:44
  2. Antworten: 2
    Letzter Beitrag: 10.03.10, 12:15
  3. Ambiguous output redirect.
    Von mkoeni1 im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 01.04.09, 20:33
  4. Antworten: 4
    Letzter Beitrag: 16.08.07, 12:37
  5. Befehl für Redirect, header(...) nicht
    Von Chocobanana im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.12.03, 10:15