PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigenes Terminal programmiern



7.e.Q
11-05-2005, 10:17
Hi Leute,


ich hab in meinem Programm einen Port geöffnet, den ich für Remote-Administration benutze. Er ist Befehlsbasiert, läuft also ähnlich einer Shell über einen Telnet-Client. Ich möchte dieser Remote-Konsole nun die gleichen Features geben, wie sie eine normale Shell bietet: TAB zum automatischen Ergänzen von Befehlen, Cursor rauf/runter um durch die Befehlshistory zu steppen, einen vernünftigen Prompt, der immer auftaucht, wenn ich eine Eingabe machen darf...

wie realisiert man solche Sachen?

Danke

Gruß,
Hendrik

Joghurt
11-05-2005, 11:50
GNUs readline ist das, was du suchst.
Allerdings steht diese unter der GPL, so dass dein Programm ebenfalls unter der GPL stehen muss, wenn du es verkaufen / außerhalb der Firma benutzen möchtest.

Du kannst allerdings das Programm so schreiben, dass es nicht unbedingt readline benötigt, und bei Bedarf verwendet. Siehe mal postgres etc.

7.e.Q
11-05-2005, 13:19
Is ja kein Ding, das unter der GPL zu vertreiben, da wir auch ein Linux selbst mit vertreiben. Wenn jemand den Source Code haben will, kann er ihn meinetwegen haben. Geklärt werden muss das dann mit meinem Chef. Ich bin nur für die Entwicklung verantwortlich, nicht für den Vertrieb und die Lizenzierung. Das ist mir hier alles wurscht...

Readline, ja?! Wie setzt man das in Kombination mit 'nem Socket ein?

Joghurt
11-05-2005, 13:22
Readline, ja?! Wie setzt man das in Kombination mit 'nem Socket ein?Wahrscheinlich reicht es, VT100 Steuercodes zu senden. Irgendwie geht das bestimmt mit termcap etc.
Schau mal in der readline-Doku nach, ich schau auch mal später mal nach, das interessiert mich jetzt auch.
Für's erste versuch doch mal, das Programm consolenbasiert zu schreiben und durch inetd aufrufen zu lassen. Dann sparst du dir erstmal den ganzen Socketmist.

7.e.Q
11-05-2005, 13:41
Das Problem, was ich da sehe, ist aber, daß das Einlesen der Befehle den Lauf des Programms nicht blockieren darf, da das Programm auch noch einen riesen Haufen anderer Files bearbeitet (Sockets, Pipes, Terminals etc.). Das Programm muss ständig in einer Schleife laufen und die Filedeskriptoren der Sockets und so abfragen. Wenn ich ein readline auf den Socket lege, dann blockiert das readline das gesamte Programm, während es auf eine Eingabe wartet. Da muss es andere Möglichkeiten geben.


edit: ah ich denke, das wird möglich per rl_callback. Jetzt ist nur die Frage, wie biege ich ReadLine bei, daß es auf dem Socket auf Eingaben lauscht?

7.e.Q
12-05-2005, 05:45
Da sich das Thema ja inzwischen ein wenig gewandelt hat, mache ich dafür einen neuen Thread auf. Dieser hier gilt dann als erledigt.