Unix-Befehlsinterpreter selbst schreiben

Dieses Thema im Forum "C/C++" wurde erstellt von Sanicx, 30.04.2008.

  1. Sanicx

    Sanicx Grünschnabel

    Dabei seit:
    24.04.2008
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,

    ich hab da ein Problem mit dem schreiben eines eigene Befehlsinterpreters. Dieser eigene Interpreter soll nur ausführbare Dateien mit maximal 2 Optionen starten.

    Weiß von euch vielleicht jemand, wie das funzt? Ich steh mal wieder voll auf'm Schlauch!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 30.04.2008
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Du könntest dir einfach eine minimale Shell schreiben oder ein Skript nutzen.

    Code:
    #!/bin/bash
    $1 $2 $3
    
    Dieses könnte man z.B. als 'command.sh' abspeichern und dann entsprechend mit

    Code:
    command.sh <befehl> <parameter1> <parameter2>
    
    ausführen. Sind mehr als 2 Parameter vorhanden, werden diese einfach ignoriert.
     
  4. Sanicx

    Sanicx Grünschnabel

    Dabei seit:
    24.04.2008
    Beiträge:
    9
    Zustimmungen:
    0
    Aber die Aufgabe besteht leider darin, den Interpreter als C-Programm zu implementieren.
     
  5. #4 Gott_in_schwarz, 30.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ich glaube er will eher wissen mit welcher/welchen Funktion/Funktionen in C/C++ man externe Programme aufrufen kann. Oder kA, vielleicht will er auch erstmal wissen, wie man user-Eingaben "managed", oder er will wissen wie man etwas auf dem Bildschirm ausgibt. Genau spezifiziert hat er das Problem ja nicht... Genausowenig wie die verwendete Sprache, wobei ich dank der Platzierung des Threads in diesem Subforum eine gewisse Vorahnungen habe, welche Scriptsprachen quasi diametral gegenüber steht.. (Und bash erst recht, auch wenn man es "bash-Skript" nennt.. Außerdem wäre dein Skript kein (interaktiver) Interpreter bitmuncher, so hatte ich das Post nämlich verstanden..)
     
  6. #5 supersucker, 30.04.2008
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ich glaube, er will, das wir seine Hausaufgaben komplett für ihn schreiben.

    Wie was funzt? (Zu meinen Zeiten hieß das ja noch funktionieren, aber was weiß ich schon)

    Du hast noch nicht mal angefangen mit der Aufgabe, oder?

    Stell konkrete Fragen, wenn du hier Hilfe willst.
     
  7. #6 bitmuncher, 30.04.2008
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Hab garnicht auf den Bereich geachtet. Sorry. Ich hatte vor einiger Zeit mal eine minimale Shell gebastelt, aber das würde dank Job-Handling usw. wohl etwas zuviel sein. Ansonsten würde ich halt den Input einlesen, alle Argumente, die nicht sein dürften, vom Input-String abschneiden und das ganze an system() übergeben um es auszuführen. Die Frage ist halt, ob auch Sachen wie den Befehl im Hintergrund laufen lassen (also ein Job-Handling) u.ä. unterstützt werden müssen, dann wird das Ganze wohl etwas mehr.
     
  8. #7 Aqualung, 30.04.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Code:
    man 3 system 
    Gruß Aqualung
     
  9. #8 bitmuncher, 30.04.2008
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Da wird er noch einige Manpages mehr lesen müssen. ;)
    Einlesen des User-Inputs, String-Handling-Funktionen um überflüssige Parameter abzutrennen und ggf. auszulesen, ob ein '&'-Zeichen am Ende des Befehls ist und wenn auch noch ein echtes Job-Handling rein muss, wird er auch um Dinge wie tcsetpgrp(), perror() u.a. nicht herum kommen.
     
  10. Sanicx

    Sanicx Grünschnabel

    Dabei seit:
    24.04.2008
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo,

    ich glaub ich hab einfach viel zu kompliziert gedacht. Es ging einfach nur darum, dass man in dem aufgerufenen Programm Befehle eingeben kann, die dann dort ausgeführt werden.

    Also bisher hab ich das hier:
    Code:
    int main()
    {
       char *kommando[] = {"date", "who", "pwd"};
       int zahl;
       printf("\n Bitte wählen Sie ein Kommando aus!");
       printf("0 : date\n 1 : who\n 2 : pwd\n");
       scanf("%i", zahl);
    
       execlp(kommando[zahl], kommando[zahl], 0);
       printf("Falsche Zahl. Kein Kommando verfügbar.");
       return 0;
    }
    
    Jetzt soll jedoch das Kommando nicht über eine Zahl, sondern direkt über den Befehl aufgerufen werden können. Wenn ich mein Programm dahin verändere, erhalte ich immer die Ausgabe Systemzugriffsfehler.
    Muss ich die Datei zum auslesen der Befehle vielleicht in ein anderes Programm auslagern?
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    Du musst einen Parser schreiben, entweder von Hand oder du lässt ihn von einem Parsergenerator(z.b lex,bison,yacc) erzeugen.
     
  13. andy81

    andy81 von_suse_zu_arch_wechsler

    Dabei seit:
    30.03.2008
    Beiträge:
    72
    Zustimmungen:
    0
    Ich habe mal eine Frage am Rande:

    Hat dein Programm so wie du es oben gepostet hat wirklich funktioniert? Ich kann mir das nämlich nicht vorstellen. Die scanf Funktion verlangt doch nach einer Typumwandlung in einen Integer zwingend einen Pointer auf einen Integer als zweites Argument. Da du zahl als normalen Integer definiert hast fehlt dir also noch ein Adressoperator.

    Meiner Meinung nach müsste es also also so heißen:
    Code:
    scanf("%i", &zahl);
    
     
Thema:

Unix-Befehlsinterpreter selbst schreiben

Die Seite wird geladen...

Unix-Befehlsinterpreter selbst schreiben - Ähnliche Themen

  1. Artikel: Kodi/XBMC selbst compilieren

    Artikel: Kodi/XBMC selbst compilieren: Wer die aktuellste Kodi/XBMC-Version benötigt, findet diese meist nicht über die Paketverwaltung des Linux-Systems. Es ist aber nicht weiter...
  2. Artikel: Live-Systeme mit Lesslinux selbst bauen

    Artikel: Live-Systeme mit Lesslinux selbst bauen: Linux gibt jedem die Möglichkeit, ein Betriebssystem nach den eigenen Vorstellungen zu gestalten. Vor allem für Notfall- und Rettungs-DVDs lohnt...
  3. Kurztipp: Kali Linux: Sicherheit im Netzwerk selbst testen

    Kurztipp: Kali Linux: Sicherheit im Netzwerk selbst testen: Live-Systeme, die als Werkzeugkiste zum Thema Sicherheit und Pentests dienen, sind eine Klasse für sich. Ein renommierter Vertreter ist Kali...
  4. Artikel: Reprepro - Debian-Systeme mit einem selbst aufgesetzten Paket-Repo versorgen

    Artikel: Reprepro - Debian-Systeme mit einem selbst aufgesetzten Paket-Repo versorgen: Wer mehrere Debian-Systeme verwaltet, kommt irgendwann einmal um das Erstellen eigener Debian-Pakete nicht mehr herum. Wer die selbst erstellten...
  5. Indiegogo Pi Top: Selbstbaulaptop auf RPi+Basis

    Indiegogo Pi Top: Selbstbaulaptop auf RPi+Basis: Der Minicomputer Raspberry Pi (RPi) sorgt bei vielen Entwicklern und Bastlern für Ideenreichtum. Jetzt möchte ein Team aus Hardware- und...