mikrocontroller.net

Forum: PC-Programmierung [Linux] Programm über Konsole Steuern


Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich weiß nicht sorecht ob mein Betreff richtig gewählt ist, aber mir 
fällt sonst kein passender ein.

Also zu meiner Frage:

Ich habe ein kleines Programm (C++) für Linux geschrieben welches im 
Hintergrund läuft und mit uC Kommuniziert. Jetzt möchte ich mich via ssh 
von einem anderen Rechner einloggen und diesem Programm befehle 
mitteilen. Wie kann ich dies Realisieren???

Da müsste ich doch ein zweites Programm schreiben, welches an das andere 
Programm eine Nachricht übermittelt.

Wäre nett wenn mir jemand eine kleine Hilfestellung geben könnte.

Gruß
NemesisoD

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie du dir von einem fremden Rechner Zugang verschaffst (Telnet, SSH) 
ist dir offenbar geläufig -- gut so.

Ne gängige Methode wäre z.B., in deinem Steuerprogramm einen 
Netzwerk-Server einzubauen, welcher nur lokale Verbindungen (eben des 
zweiten Kontrollprogrammes) entgegennimmt.

Auch möglich wären schlicht und einfach Signale, dann kann man das 
Steuerprogramm z.B. mit "kill -HUP <Prozessnummer>" anstuppsen.

Und wenn du garkeinen Aufwand scheust, kannte auch nen Kernelmodul 
schreiben und dann über die Gerätedatei kommunizieren.

Autor: Matt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht sind named pipes hilfreich?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur zum Klarstellen: Ich hab nich gesagt, dass die Netzwerksockets 
unbedingt IP-Sockets sein müssen, Unix-Sockets tuns genauso :-)

Autor: Hör nicht auf die Spinner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal das "screen" Programm/Befehl an.
Damit kannst du ein Programm starten und von der Konsole auf der es 
läuft entkoppeln.
Nach dem Login via SSH kannst du das Programm dann mit dieser Konsole 
Verbinden.


screen
programm aufruf
CTRL-A, dann "d" (zum Disconnecten des Prozesses von der Konsole)
exit

login via ssh
screen -r (fürs Resumen, eventuell noch die PID dahinter wenn mehrere 
screen Prozesse laufen)

fertig


Oder aber du hörst auf die Spinner hier...

Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten.

Also ich hatte mir auch schonmal die pipes angeguckt, war mir aber nicht 
ganz sicher wie ich damit umgehen muss.

Könnte mir einer ein kleines Beispiel geben, oder ein link wo ich mich 
schlau machen kann???

Gruß
NemesisoD

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hör nicht auf die Spinner

Das Programm von Michael Leske muss für diese Methode doch auf Eingaben 
reagieren, oder? Diese würden von screen auf den SSH Login umgeleitet. 
Ich kann mir das gut vorstellen, wenn es sich um ein GUI Programm 
handelt. Es wäre dann so etwas wie eine stark abgespeckte VNC 
Geschichte. Allerdings wenn das Programm schon auf Konsolengaben 
reagiert, warum es dann nicht gleich vom SSH Login aus starten und 
bedienen?

@ Michael Leske

Welche Kommandos kann das mit-dem-µC-kommunizierende-Programm denn wie 
entgegennehmen? Das bestimmt doch was du dem wie vorsetzen kannst. Hast 
du die freie Wahl, d.h. kannst du das 
mit-dem-µC-kommunizierende-Programm ggf. auch umschreiben?

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Leske wrote:

> Ich habe ein kleines Programm (C++) für Linux geschrieben welches im
> Hintergrund läuft und mit uC Kommuniziert. Jetzt möchte ich mich via ssh
> von einem anderen Rechner einloggen und diesem Programm befehle
> mitteilen. Wie kann ich dies Realisieren???

Gibt es denn ueberhaupt eine solche Moeglichkeit? Man koennte es z.B. 
mit einem AF_UNIX-Socket loesen, so habe ich es z.B. bei meinem LCD 
daemon gemacht, um die Seiten umzuschalten usw... es gibt aber 
natuerlich auch andere Loesungen.

Wenn das Programm direkt Eingaben von stdin annimmt geht es natuerlich 
recht einfach mit screen. Ein echter daemon ist das dann allerdings 
nicht mehr ;)

Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, das Programm besitzt keine GUI, es ist ein Steuerungsprogramm, 
welches
im Normalfall vollständig autonom läuft.

Ich möchte aber die möglichkeit haben in den Programmablauf einzugreifen 
um einige Parameter zu ändern oder Routinen aufzurufen um diese gezielt 
zu testen. Ich habe mit das in etwa so vorgestellt.

Das Programm startet mit Linux automatisch (der PC ist kein 
Arbeitsrechner, also meldet sich da auch niemand an) und startet mit 
seiner Aufgabe. Von einem anderen PC melde ich mich via ssh am ersten PC 
an und kann über die normale Konsole z.B. über "Programm befehl", also 
das Programm ist ein Programm aufruf mit angehängten Parametern, in den 
Prozess vom Programm einzugreifen.

Das Programm ist noch in der Eintwicklungsphase, also könnte ich auch 
dies natürlich umschreiben.

Autor: guast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lass das programm doch regelmäßig ne lokale datei einlesen, in die du 
bei bedarf befehle oder neue parameter schreibst.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre am elegantesten die Variante mit Signalen, die ich 
vorgeschlagen hab: Parameter irgendwo hinterlegen und das Steuerprogramm 
anschubsen (HUP, USR1 oder sowas).

Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre natürlich auch eine Methode, an sowas simples habe ich garnicht 
gedacht.

Aber wenn beide Programme auf die Datei zugreifen, kommt es dann nicht 
zu kollisionen?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es greift ja immer nur eines drauf zu: Einer schreibt, und erst, wenn 
das Signal abgesetzt wurde, liest der Zweite.

Autor: Michael Leske (nemesisod)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie setze ich dann ein Signal???

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also du willst so was haben wie einen Dämon
http://de.wikipedia.org/wiki/Daemon

Die einfachste Variante wäre so was wie der cron Dämon. Der nimmt seine 
"Befehle" aus einer Datei. Und die Datei wird mit dem Programm crontab 
erzeugt.

Übertragen auf dein Vorhaben: Dein ständig laufendes Programm uC-daemon 
schaut regelmässig nach, ob eine Datei uC-befehle.txt vorhanden ist und 
führt die darin enthaltenen Befehle aus. Wenn eine aktuellere 
uC-befehle.txt vorhanden ist, werden von uC-daemon die Befehle neu 
eingelesen. Während dem Lesen von uC-befehle.txt sperrt uC-daemon diese 
Datei gegen Änderung. Geändert werden kann die Datei uC-befehle.txt 
durch dein zweites Programm uC-control (oder durch Editieren) von der 
Konsole oder deinem SSH-Login aus.

Die komplizierteren Varianten ersetzen die Datei uC-befehle.txt durch 
andere Techniken (Signale, Pipes, Sockets) für den Austausch von Daten 
zwischen laufenden Programmen/Prozessen.

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.