unix shell
-
und zwar hab ich das problem das wir in c++ ne eigenen unix shell schreiben sollen. und wir haben schon angefangen das problem zu analysieren aber wirklich nen anfangen finden wir nicht, es soll "nur" folgendes können:
- Programme mit zugehörigen argumenten ausführen: z.b. cat f1 f2 f3
- Sequencing, z.b: make clean ; make dep ; make Zimage
- I/O redirection: < , > und >>, z.b.: cat < f1 >> f2
- Pipes: | z.b.: cat f1 f2 f3 | sort | uniq -c > f4
- kombinationen von I/O redirection und (mehreren) pipes müssen auch funktionieren
- logout und exit um die shell zu beenden(^D muss auch funktionieren)weiß jmd dazu nen tipp? gibts nen tutorial.. ne open source shell oder ähnliches. ich find bei google nich wirklich was. nur eine bash shell die über 5000 zeilen hat.. und das is wirklcih etwas sehr viel
danke danke im vorraus
-
string input while(1) { getline(cin,input); if(!cin || input=="exit" || input=="logout") break; system(input.c_str(); }
*scnr*
-
hihi wäre schönwenn wi rdas so machen dürften.. aber wir müssen echt nen scanner machen nen parser... der das alles einliest.. nen processexecuter der den process dann ausführt.. wir dürfen den befehlt net direkt an die shell forwarden.. sondern müssen die prozesse direkt aufrufen
-
Open Source Shells gibt es unmengen: bash, ash, zsh etc.
Schau dir eben die UNIX-System-API an, damit kommst du sicher weiter man: fork(2), man: vfork(2), man: execve(2), man: pipe(2) etc.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich finde das ganz schön bescheiden, dass das Forum dazu genutzt wird, Informatik-Hausaufgaben lösen zu lassen.
Du hast auf jeden Fall mehr davon, wenn du es selbst mal versuchst!
-
ich will nich das ihr meine Haufaufgaben macht auch wenns keine hausaufgaben sind.. ich wollte nur nen tip für nen anfang oder nen tip wo ich was gutes finden kann zu dem thema.
-
Ich denke, das schwierigste ist, Befehle wie cat some | sort | tail > file.dat 2>&1
wenn du noch nie mit dup/pipes und so gearbeitet hast, kannst du erstmal damit anfangen, diese zu verstehen, sprich, wie man sie benutzt (das ist nicht trivial und am Anfnag kostet relativ viele Nerven). D.h. du solltest dann ein programm schreiben, welches ein Programm 'x' startet und die stdout Ausgabe von 'x' durch eine pipe an 'cat' weiterleitet:
1. pipes einrichten
2. fork für 'x' und fork für 'cat'
3. mittels dup stdout von 'x' mit stdin von 'cat' verbinden
4. exec 'x' und exec 'cat' ausführenDann würde dein Programm folgender Shell Befehlzeile entsprechen:
$ x | catDu wirst sehen, dass das ein wenig arbeit ist, aber du musst zuerst diese gut beherrschen, bevor du sowas wie oben machen kannst.
Ich denke, der Parser ist die wenig schwierige Arbeit (vielleicht lässt sich mit flex & Co. schnell etwas schreiben).
Ich arbeite meistens mit dem Linux/Unix Systemprogrammierung Buch, damit bin ich echt zufrieden, da bekomme ich gute Beispiele und Erklärungen (wie oben von den pipes, usw)