# Testaufgabe-Linux!



## Variety (1. Juli 2003)

Ich bin ein halber Newbie und soll nun die folgende Aufgabe lösen, aber habe keinen Schimmer wie das geht. Ich hoffe mir hilft jemand hier im forum bei diesem "Test":
-------------------
"Einfaches Terminal-Programm in C/C++ unter Linux

Das Programm soll ein einfaches Terminal sein, an das sich der
User per Netzwerk einloggen kann und bestimmte Funktionen
ausführen kann.
Das Programm besteht aus zwei Teilen: dem Server und dem Client.
	Der Server nimmt die Verbindungen an und verarbeitet sie. Der
Client ist die Benutzer-Schnittstelle zum Server und dient zur
Eingabe der Befehle. 

Programmverlauf

Der Server läuft unter Linux im Hintergrund (als sog. Daemon)
und wartet auf neue Verbindungen zum Client. Sobald eine solche
Verbindung angefragt wird, antwortet der Server und die 
Connection wird erstellt. Der Client kann nun Befehle eingeben
(wie z.B. cd, dir, type etc. (DOS-Befehle)) und bekommt zu jedem
Zeitpunkt den Status des Befehles. Sobald die Funktion durch-
gelaufen ist, kann der Benutzer einen neuen Befehl eingeben.

Die zu unterstützenden Befehle sind:
- dir [DIRNAME] (Verzeichnisinhalt anzeigen)
- cd DIRNAME (akt. Verzeichnis wechseln)
- md DIRNAME (Verzeichnis erstellen)
- rd DIRNAME (Verzeichnis und Unterverzeichnisse löschen)
- type FILENAME (Datei anzeigen)
- write text FILENAME (Text in Datei schreiben)

Abgabe

Die Aufgabe soll nach spätestens einer Woche abgegeben werden, egal
in welchem Stadium sie sich befindet!
Sie soll in C/C++ unter Linux geschrieben sein. Andere Programmiersprachen
bzw. Betriebssysteme sind nur nach vorheriger Absprache möglich. Abzugeben sind: fertig kompiliertes Programm
kommentierter Source-Code und dazugehörige Dateien kurze Beschreibung des Programmes sowie eine kurze Dokumentation der verwendeten Netzwerk-Struktur (Netzwerk-Protokoll).
-----------------------


----------



## Marcus Roffmann (1. Juli 2003)

Da hast ja was vor dir...

Okay, dann würde ich sagen fang erstmal an den Server zu basteln, dürfte so ziemlicher Brocken werden.
Kenntnisse in Netzwerkprogrammierung sind (sag ich einfach mal so) Voraussetzung für sowas.
Ich denke mal, wenn man sich die anderen Terminalprogramme mal anguckt (egal welches) und den Source von denen studiert kann man schon einiges dran lernen. Sind ja zum Großteil sehr gut dokumentiert.

Ich würde dir folgende Tutorials empfehlen:
http://www.tldp.org/HOWTO/Net-HOWTO/index.html
http://www.tldp.org/HOWTO/Program-Library-HOWTO/index.html
http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html

Eventuell interessante Sites:
http://leapster.org/linoleum/
http://www.ecst.csuchico.edu/~beej/guide/net/
http://www.lowtek.com/sockets/

Ich hoffe ich konnte dir damit weiterhelfen.


----------



## Thomas Darimont (1. Juli 2003)

Servus!

Hmmm die Aufgabe kommt mir garnicht soooo schwierig vor...

Als Client kannst du ja ganz normal "Telnet" von Win / Unix verwenden, dann fällt dieser Part schon mal weg ...

Dein Server, denn du in C/C++ schreibst lauscht dann auf einem Port z.Bsp 99999 auf eingehende Netzwerkverbindungen. 

Also:

telnet LinuxRechnerName:99999

Im Server selbst musst du nur den Eingabedatenstrom nach den Keywords:

- dir [DIRNAME] (Verzeichnisinhalt anzeigen)
- cd DIRNAME (akt. Verzeichnis wechseln)
- md DIRNAME (Verzeichnis erstellen)
- rd DIRNAME (Verzeichnis und Unterverzeichnisse löschen)
- type FILENAME (Datei anzeigen)
- write text FILENAME (Text in Datei schreiben)

überwachen...

Die Zeichenfolge dir wird dann in das Nativekomando "ls", cd in "cd", md in "mkdir", rd verz in "rmdir verz", type filename in "cat filename", write text filename in "echo TEXT....TEXT >> filename"
"übersetzt". Sprich wenn du in deinem Eingabedatenstrom "dir" empfängst, führst du einfach das Systemcommando "ls" aus und schickst (leitest) die Ausgabe(den Ausgabestrom) dieses Kommando wieder an den Klient um ...

Sollte nicht allzu schwer sein ... mit Java ist das kein Problem, mit C/C++ sollte das ebenso wenig eines sein ...

Gruss Tom


----------

