Anzeige:
Ergebnis 1 bis 2 von 2

Thema: externes programm starten

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.11.1999
    Ort
    MD
    Beiträge
    44

    Post externes programm starten

    hi.

    wie kann ich mittels c++-anweisung(en) ein externes programm starten ohne auf die ergebnisse dieses warten zu müssen. ähnlich dem kdevelop-extras-menü.
    evtl. mit fork()? aber wie? ein kleines code-beispiel wär nicht übel.

    danke im vorraus &

  2. #2
    iGEL
    Gast

    Post

    Moin ar!

    Mit c++ kenne ich mich zwar nicht so aus, aber da du schon fork() anführst, denke ich, dass du auch nix gegen C-Code haben wirst. Ich habe im letzten Semester eine kleine Shell programmiert, hier der Code der einfachen Version (reicht zum verstehen):

    Code:
    #define _INCLUDE_POSIX_SOURCE
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/wait.h>
    #include <string.h>
    
    /**************************************************************************
    *
    * Name:          shell
    *
    * Syntax:        shell
    *
    * Beschreibung:  shell ist ein einfacher Kommandointerpreter, der vom
    *                Benutzer eingegebene Programme ausfuehrt. Die Kommandos
    *                muessen mit relativem oder absolutem Pfad angegeben
    *                werden, die PATH-Umgebungsvariable wird nicht beachtet.
    *                Es werden keine Parameter oder Umgebungsvariablen an das
    *                Programm uebergeben.
    *
    ***************************************************************************
    *
    * Zweck:         Die shell kreiert mit fork einen Kindprozess, der sich
    *                mittels execve selbst durch das ausgefuehrende Programm
    *                ersetzt.
    *
    * Prototyp:      int main(void);
    *
    * Parameter:     (keine)
    *
    * Funktionswert: 0
    *
    **************************************************************************/
    int main()
    {
        int status, pid, ende;
        char befehl[128];
    
        do {
    
            printf("Command: ");
            scanf("%127s", befehl);
    
            if ((ende = strcmp(befehl, "exit")) != 0) { /* Nur ausfuehren, wenn
                                                          der Befehl != exit */
                if ((pid = fork()) != 0) {
                    wait(&status);
                }
                else {
                    execve (befehl, NULL, NULL);
                    printf("Error: Can't execute %s !\n", befehl);
                    _exit(0);
                }
            }
        }
        while(ende != 0);
    
        return 0;
    }
    fork() erstellt eine exakte Kopie des laufenden Prozesses, der neue beginnt auch nicht am Anfang, sondern genau bei der fork()-Verzweigung. Wenn fork() den Rückgabewert 0 hat, befinden wir uns im Kindprozess, ist er größer 0, sind wir in Vaterprozess und der Rückgabewert ist die pid des Kindes, wird etwas kleiner 0 zurückgegeben, so konnte kein Kindprozess gestartet werden.

    Der Kindprozess muss sich dann mittels execve oder einer Variante davon durch ein anderes Programm ersetzen. Leider ist es wie gesagt kein C++, sondern reines C.

    cu Johannes

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •