Forum: PC-Programmierung [c++] anderes programm steuern


von andre (Gast)


Lesenswert?

ich wollte mir zum üben mit gtkmm ein kleines programm schreiben, 
welches per android-sdk veränderungen am dateisystem meines android 
handys vornimmt.

die android-sdk stellt dafür ein programm namens "adb shell" zur 
verfügung. dieses baut eine shell verbindung zum telefon auf und von 
dort aus kann man dann shell befehle absetzen die auf dem telefon 
ausgeführt werden.

soweit der manuelle weg. nun dachte ich, mit der system() funktion 
könnte ich diese befehle auch aus einem c++ programm ausführen. doch das 
geht nicht.

system("cd /home/andre/android/tools;./adb\\ shell");

meldet sh: ./adb shell: not found

jemand eine idee woran das liegen kann? kann es damit zusammen hängen 
das das android-sdk programm adb heisst und nur als parameter shell 
erwartet?

von andre (Gast)


Lesenswert?

es liegt definitiv an dem parameter shell. die obere codezeile nur mit 
./adb gibt den hilfetext von adb aus. wie bekomme ich nun den parameter 
an den system aufruf angehängt?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das \\ gehört da sicher nicht hin, damit sagst du ihm das das kein 
Trennzeichen ist sondern zum Befehl gehört. Im Zweifel würd' ich nen sh 
datei machen

von andre (Gast)


Lesenswert?

omg es lag wirklich nur an den \\
ohne gehts..
danke!

von andre (Gast)


Lesenswert?

leider kann ich jetzt nicht mit der shell interagieren. jeder weitere 
befehl wird ignoriert.

von andre (Gast)


Lesenswert?

gibts keine möglichkeit den standard output jetzt in die geöffnete shell 
umzuleiten?

von Mano W. (Firma: ---) (manow)


Lesenswert?

Probier's mal so:

system("cd /home/andre/android/tools;./adb\ shell");

Es liest sich so, also ob das Programm adb shell heißt.

von andre (Gast)


Lesenswert?

die shell verbindung lässt sich mitlerweile herstellen
system("cd /home/andre/android/tools;./adb shell"); tut was es soll. nur 
danach sind keine weiteren eingaben in diese shell möglich. auch das 
programm  sagt erst wieder was, wenn ich die shell über exit manuell 
verlasse

ich müsste also jetzt den standard output in diese shell umleiten damit 
ich die von mir gewünschten befehle absetzen und am ende über exit alles 
wieder schließen kann.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Bei C++ kann ich dir da nicht helfen, unter Java würde man das über eine 
Processbuilder regeln. Mit dem system Ding setzt du einen Befehl ab... 
danach ist Schluss. Also müßtest du mal schauen wie man unter C++ einen 
Prozess startet und die Input/Outputstreams steuert...

von Mano W. (Firma: ---) (manow)


Lesenswert?

http://lsw.ee.hm.edu/~thomas/Vorlesung/VBS/inhalt_vbs_frames.html

Schau dir mal das Beispiel auf Seite A36 im Kapitel 10 an. Hier werden 
STD IN und OUT umgeleitet und ein anderes Programm gestartet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.