Systemaufruf an einer Variable übergeben

Brusko

Well-Known Member
Guten Abend,
ich würde gerne system(cmd.str().c_str()); Aufruf in einer Variable abspeichern,
am besten in c++ und nicht das ich erst den inhalt in einer datei speichere und später auslese.
Könnte mich jemand auf den richtigen weg leiten :-) ?

Mfg Michael
Code:
void readout_temperature (string what , int which ) //Temperaturen auslesen
    {
     ostringstream cmd;
     if (what=="room") 
       {
        cmd << "digitemp_DS9097 -o\"Sensor %R %.2C\" -t" << which << " | awk '/Sensor/ {print $2 , $3}'";
        what.erase();
       }
     else if (what=="harddisk")
            {
             what.erase();
            }
     else if (what=="initialisieren")
            {
             cmd << "digitemp_DS9097 -s /dev/cuad0 -i";
             what.erase();
            }
    system(cmd.str().c_str());
    }
 
popen ist doch glaube ich kein c++ oder ? werde mir aber dennoch dazu mal etwas suchen.
Habe damit noch nicht gearbeitet
 
system stammt auch von c und kam nich erst mit c++ ;) ich hab mir dazu mal ne funktion geschrieben. vllt finde ich sie noch.

edit:
ne war doch nich mit popen. da hab ich die ausgabe in ne datei umgeleitet und ausgelesen. also ne sehr unschoene loesung :)
 
Zuletzt bearbeitet:
Nun ich wuste mir nicht anders zu helfen also wie mit system. Wenn jemand das mit reinen c++ kennt gerne ich würde es lieber dann umändern in c++
 
Öh, was willst du übrigens machen?
Der Code sieht für mich so aus, als gäbe es ne API, die dir die System-Aufrufe ersparen...
 
ich möchte mit dieser Funktion z.b das programm Digitemp starten welches mir denn meine DS18s20 Fühler ausliest (temperatur und code), diese dann im Vector speichern und weiter verarbeiten.
Dann mbmon und diese auch im Vector speichern.

mfg Michael
 
Ich halte C++ da auf Anhieb nicht grad für geeignet. Das was du willst ist ja eher ein Parser und - man erschlage mich - da ist perl Platzhirsch.
However, popen ist unter C++ die gängige Lösung für so etwas. Auch wenn du die Daten direkt aus den Kernelschnittstellen besorgst(Optimum) hast du C-Funktionen zur Auswahl. Und da ist auch überhaupt nix Verwerfliches dabei.

Kommst du an der Konsole auch über sysctl an deine Werte? Wenn ja, ist sysctl(3) das Optimum.
 
Die daten die ich per digitemp auslese bekomme nicht über sysctl also werde ich wohl nochmals mich mit popen beschäftigen müssen.
Bislang waren es immer nur fehler. aber wenn es nicht anders geht bzw eleganter dann ebend mit popen.
 
Über Eleganz mach dir bei dem Gefrickel mal keine Gedanken ;-)
BTW, wenigstens etwas eleganter: Nimm bei Systemaufrufen ausschliesslich absolute Pfade.
/usr/bin/awk, ebenso bei digitemp und so.
 
Zurück
Oben