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
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.
Nur zum Klarstellen: Ich hab nich gesagt, dass die Netzwerksockets unbedingt IP-Sockets sein müssen, Unix-Sockets tuns genauso :-)
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...
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
@ 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?
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 ;)
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.
lass das programm doch regelmäßig ne lokale datei einlesen, in die du bei bedarf befehle oder neue parameter schreibst.
Das wäre am elegantesten die Variante mit Signalen, die ich vorgeschlagen hab: Parameter irgendwo hinterlegen und das Steuerprogramm anschubsen (HUP, USR1 oder sowas).
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?
Es greift ja immer nur eines drauf zu: Einer schreibt, und erst, wenn das Signal abgesetzt wurde, liest der Zweite.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.