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


von Michael L. (nemesisod)


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

von Sven P. (Gast)


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.

von Matt (Gast)


Lesenswert?

Vielleicht sind named pipes hilfreich?

von Sven P. (Gast)


Lesenswert?

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

von Hör nicht auf die Spinner (Gast)


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...

von Michael L. (nemesisod)


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

von Stefan B. (stefan) Benutzerseite


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?

von Michael G. (linuxgeek) Benutzerseite


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 ;)

von Michael L. (nemesisod)


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.

von guast (Gast)


Lesenswert?

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

von Sven P. (Gast)


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).

von Michael L. (nemesisod)


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?

von Sven P. (Gast)


Lesenswert?

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

von Michael L. (nemesisod)


Lesenswert?

Und wie setze ich dann ein Signal???

von Stefan B. (stefan) Benutzerseite


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.

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.