Wie kann ich meine eigene grundlegende Unix-Shell in C implementieren?
Ich bin ein Neuling auf Prozess-und thread-management. Meine Schale sollte verstehen PATH
Umgebungsvariable. Es kann eingestellt werden und geändert werden. Es läuft in zwei-Wege -interaktive & batch-Modus. Shell ist in der Lage mehr als einen job wie ls, ps;wc-Datei;cal. Ich möchte mir meine Hände schmutzig, auf Signale zu. Also ich behandeln soll ^K , ^c als gut.
Ich weiß, ich werde zu verwenden, Führungskräfte, Gabeln und Rohre, aber kann einfach nicht anfangen.
InformationsquelleAutor der Frage Alex Xander | 2009-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle unix-shells sind open-source - also ein guter Ort, um zu starten, kann sein, den code zu Lesen.
Wenn Sie auf der Suche nach ein gutes starter-Artikel zu diesem Thema versuchen Schreiben Sie Ihre Eigenen Shell aus der Linux Gazette.
Ein weiterer guter Ausgangspunkt ist ein Blick auf den Quellcode von mini-shell nur weil es einer der kleinsten um Ihren Kopf Runde.
InformationsquelleAutor der Antwort Supertux
Deiner main-Schleife ist:
fgets(3)
für eine einfache shellreadline(3)
für ein ausgefallenes)Analysieren der Befehl, gibt es zwei gängige Möglichkeiten. Schreiben Sie einen recursive-descent-parser oder verwenden Sie
yacc(1)
zu generieren. Es ist viel einfacher bang eine erste parser mityacc
aber können Sie völlig stecken, Debuggen und es wirklich will, werden Kontext-frei. Ich bevorzuge rekursiven Abstieg aber gerade über jeder sonst in der Welt lieber mit yacc. (Technischbison
.) Wenn die shell ist wirklich sehr einfach, wie eine Hausaufgaben-shell yacc kann overkill.Zu tun, die lexikalische Analyse, Sie können auch Rollen Sie Ihre eigenen oder verwenden Sie die flex.
Brauchen Sie nicht zu verwenden, alle threads.
InformationsquelleAutor der Antwort DigitalRoss
Viele der Unix-Bücher, die beschreiben, die wichtigsten Systemaufrufe implementieren auch eine Schale um zu veranschaulichen, wie und warum Sie verwenden könnte, die verschiedenen Aufrufe. Stevens und Rochkind sind zwei solcher Bücher:
W Richard Stevens, Stephen A Rago
Advanced Programming in the Unix Environment, 3rd Edn
Marc J Rochkind
Advanced Unix Programming, 2nd Edn
InformationsquelleAutor der Antwort Jonathan Leffler