www.mikrocontroller.net

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


Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
omg es lag wirklich nur an den \\
ohne gehts..
danke!

Autor: andre (Gast)
Datum:

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

Autor: andre (Gast)
Datum:

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

Autor: Mano Wee (Firma: ---) (manow)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Mano Wee (Firma: ---) (manow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://lsw.ee.hm.edu/~thomas/Vorlesung/VBS/inhalt_...

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.