|
Termin
Die Lösung für diese Aufgabe ist bis zum 14.01.2007 einzureichen.
Aufgabe 3 -- Eine einfache Shell
Ziel dieser Aufgabe soll es sein, Sie mit grundlegenden
Konzepten in Bezug auf das Prozeßmanagement unter UNIX vertraut
zu machen. Sie werden sich mit den einzelnen Phasen des
UNIX-Prozeßmodells beschäftigen und sich mit der Ein- und
Ausgabe von UNIX-Prozessen befassen. Darüber hinaus werden Sie
sich mit Standardwerkzeugen wie yacc und lex auseinandersetzen.
Implementieren Sie eine Shell, die folgende Funktionalität
bereitstellt:
- Die Shell liest ihre Kommandos von der Standardeingabe
und akzeptiert dabei folgende Syntax:
command [arg1 ... arg9]
[< input_redirect] [> output_redirect] [ | command2 ... ]
[&]. Die Kommandos werden syntaktisch analysiert und bei Fehlern mit einer entsprechenden Ausschrift zurückgewiesen. Es soll möglich sein, beliebig viele Programme über eine pipe zu verknüpfen.
Gehen Sie bei der Implementierung in mehreren Schritten vor:
- Entwerfen Sie eine Grammatik, die die Syntax der Eingabezeile beschreibt. Setzen Sie diese Syntax mit Hilfe eines Werkzeuges (yacc, lex) oder 'zu Fuß' in ein Programm um. Am Ende der Syntaxanalyse sollten folgende Informationen bereitstehen:
- Name und Parameter der auszuführenden Programme
- Informationen über Ein- und Ausgabeumleitungen
- Soll das ganze als Hintergrundprozeß ausgeführt werden oder nicht.
- Implementieren Sie die Ausführung einzelner Kommandos unter
Verwendung von fork(),
execve() und
wait().
- Fügen Sie Ein- und Ausgabeumleitung hinzu und nutzen Sie dazu
open(),
dup2() und
close().
- Fügen Sie die Kopplung mehrerer Programme über Pipes hinzu.
Beachten Sie hierbei die Bedingungen, unter denen eine
pipe() ein 'End of File'
signalisiert und berücksichtigen Sie das bei Ihrer
Implementierung.
- Zu guter letzt fügen Sie die Unterstützung für
Hintergrundprozesse hinzu. Verwenden Sie hierzu
sigaction() und
dazugehörige Funktionen.
Eine vollständige Lösung besteht aus den (funktionstüchtigen) Quelldateien
sowie einem Makefile zum Übersetzen des Programmes.
Material
- Literatur:
-
- W.R. Stevens: "Advanced Programming in the UNIX Environment"
- A. Tanenbaum: "Modern Operating Systems"
- H. Herold: "lex und yacc: Lexikalische und syntaktische
Analyse"
- Online-Ressourcen:
-
|