Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: ReduX am 30. June 2007, 04:14

Titel: Console in C
Beitrag von: ReduX am 30. June 2007, 04:14
Hi,
Ich habe nun schon ein wenig rumprobiert und möchte mit einer Console in C vortführen!
Wie würdet ihr das machen?
Sollte ich da jetzt rießige switch blöcke erstellen oder gibt es eine bessere Alternative?

MFG ReduX
Titel: Re: Console in C
Beitrag von: bluecode am 30. June 2007, 10:03
Ein shell implementiert normalerweise nicht die gesamten Befehle, sondern nur die notwendigen sprachlichen Konstrukte (zB. Pipes, if-abfragen, schleifen, etc.). Die eigentliche Funktionalität (zB. ps, ls, etc.) wird von anderen Programmen übernommen.
Oder für was hättest du einen switch Block gebraucht?
Titel: Re: Console in C
Beitrag von: ReduX am 30. June 2007, 11:29
Hi,
Also mit switch hätt eich gedacht z.b.:
switch(eingabe)
case"dir":
Files auflisten
break;
usw.
Hab damit nochnicht so die erfahrung, mein aktueller stand ist ich botte und lade den C-Kernel ca. so wie im C-Kernel Tutorial.

MFG ReduX
Titel: Re: Console in C
Beitrag von: bluecode am 30. June 2007, 11:32
Wenn man noch keine Möglichkeit hat Dateien von einem Medium zu laden (aufgrund von fehlendem Disketten/Festplatten/CD/Dateisystem-Treiber) dann ist das sicher eine Übergangslösung, aber danach würd ich das wie oben beschrieben machen.
btw. dein Code wird so nicht funktionieren. Du musst mit strcmp/strncmp die Zeichenketten vergleichen, man kann das so nicht einfach in ein switch/case packen.
Titel: Re: Console in C
Beitrag von: ReduX am 30. June 2007, 13:18
Hi,
Also wie bereits gesagt bin ich auf dem stand wie im Tut C-Kernel.
So wenn ich nun als Dateisystem ext2 integriere kann ich ja dann deine Methoda anwenden oder? Oder brauch ich noch Festplattendreiber,CDTreiber?
Weil eigentlich kann ich ja dann mit dateien umgehen wenn ich ein FS habe!
Wie sieht das dann genau aus? etw. so?:
Tastatureingabe
if schleife
programm starten
rückgabe ausgeben
Nur wie funktioniert das mit den Programmen in Win mache ich beim Compilen .exe Files aber wie soll ich es da machen, also ich schreib mein Programm und dann compile ich es und hab dann ne .obj muss ich diese dann wie im TUT mit den anderen zusammen linken? Eigentlich ja nicht!
Oder hat es dann ein bestimmtes Format ähnlich wie bei Linux wo ich dann einfach über ne Funktion starten kann?

MFG ReduX
Titel: Re: Console in C
Beitrag von: FreakyPenguin am 30. June 2007, 13:29
Also erstmal würde ich dir empfehlen, Programmieren zu lernen. Damit mein ich jetzt nicht nur "hello world!". Das soll jetzt keine Beleidigung von mir sein, aber wer ein if als Schleife bezeichnet, hat noch was nicht begriffen...
Und bevor man ein OS in einer Programmiersprache schreibt, sollte man diese Sprache zuerst einigermassen beherrschen.

[edit] @Topic:
Ein Dateisystem-Treiber alleine bringt garnichts. Irgendwo muss der ja die Daten herkriegen.

Zum laden der Programme: Diese werden natürlich nicht mit dem Kernel zusammen gelinkt, sondern als eigenständige Programme.

Und was du mit
Zitat
Oder hat es dann ein bestimmtes Format ähnlich wie bei Linux wo ich dann einfach über ne Funktion starten kann?
meinst, ist mir nicht ganz klar.
Titel: Re: Console in C
Beitrag von: ReduX am 30. June 2007, 14:41
Hi,
Ja ich weiß das if auch keine Schleife ist!
Was ich nochnicht kann ist asm bin aber drann!
Bin heute nur en bissel daneben!
Also wegen dem Linux Format meine ich:
Wie soll ich das exteren Programm compilieren? Kenne mich mit FS nochnicht so aus! Soll ich wie den Kernel eine .bin erstellen, kann ich diese dann mit dem FS irgendwie später aufrufen?
Hoffe es ist so verständlich.

MFG ReduX
Titel: Re: Console in C
Beitrag von: FreakyPenguin am 30. June 2007, 14:48
Kenne mich mit FS nochnicht so aus! Soll ich wie den Kernel eine .bin erstellen, kann ich diese dann mit dem FS irgendwie später aufrufen?

Also ich vermute mal, du meinst nicht Dateiesystem (denn damit hat das überhaupt nix zu tun) sondern Binär-Format oder wie man das auch immer nennen will. Für den Anfang reicht eine Flache Binary schon aus, ich würde dir aber trotzdem empfehlen von Anfang an ein "richtiges" Binär-Format zu benutzen, wie beispielsweise ELF oder PE. Wie diese Formate genau funktionieren, findest du in den entsprechenden Spezifikationen.
Titel: Re: Console in C
Beitrag von: bluecode am 30. June 2007, 14:48
Wie soll ich das exteren Programm compilieren? Kenne mich mit FS nochnicht so aus! Soll ich wie den Kernel eine .bin erstellen, kann ich diese dann mit dem FS irgendwie später aufrufen?
Das Dateiformat deiner ausführbaren Dateien hat nichts mit dem Dateisystem zu tun. Das Dateisystem ist nur dafür zuständig aus den Sektoren einer Diskette/Festplatte/CD/DVD eine Datei- und Ordnerstruktur zu machen.
.bin kann man zwar zu Testzwecken als Format wählen, aber später wäre eines mit ein paar tolleren Features (Relocations, Zugriffsrechte auf Pages, Symbole, überhaupt mal nen Einsprungpunkt für die Datei) angebracht, also zB PE oder elf. Dein Programm linkst du normalerweise gegen deine selbst geschriebene libc. Die sorgt dafür das die main() Funktion aufgerufen wird und stellt auch die standard C funktionen speziell für dein OS zur verfügung.
Titel: Re: Console in C
Beitrag von: Termite am 02. July 2007, 13:26
Moin

die intern implementieren Kommandos würd ich in Funktionen auslagern, damit das Programm übersichtlich bleibt. Und ob die hauptschliefe ein IF {} else if{} gebilde wird, oder ob sich ggf eine schönere übersichtlicher lösung findet würde bei mir von der anzahl der internen Kommandos abhängen.

Bei bis zu 10 würd ich noch zu if else greifen.

Darüber würde ich mir eine Liste aus den Befehlen und den Funktionspointern zusammenbauen, in inerhalb dieser Liste das entsprechende Kommando suchen, und dann einfach den funktionspointer aufrufen.

ggf liese sich da dann sogar noch etwas optimieren ( hash list, oder suchen in einer sortierten liste)

bei allen nicht internen Kommandos würde ich dann nach externen programmen suchen, und diese dann starten.

gruss