Warum child-Prozesses zurückgibt exit-status = 32512 in unix?

In meinem Programm, das ich ausführen Befehl gegeben und erste Ergebnis (log -, und exit-status). Auch mein Programm haben unterstützen shell-spezifische Kommandos (d.h. Befehle, die enthält shell bestimmte Zeichen ~(tild),|(pipe),*). Aber wenn ich versuche zu laufen sh -c ls | wc in meinem home-Verzeichnis über mein Programm es fehlgeschlagen ist und deren exit-status war 32512, auch in den stderr-stream "sh: ls | wc: command not found" gedruckt wurde.

Aber das interessante an der Sache ist, dass der Befehl sh -c ls | wc arbeitet korrekt, wenn ich es in der shell.

Was ist das problem? Oder mehr vorzuziehen wie kann ich die shell-spezifische Kommandos über mein Programm (ich.EG, welcher Befehl mit welchen Parametern sollte ich laufen)?

Den code-Teil der Balg ist in untergeordneten Teil nach dem fork(). Es executs den Befehl.

tokenized_command ist std::vector<std::string> wo in meinem Fall "sh", "-c", "ls", "|", "wc" gespeichert sind, auch die, die ich versucht habe zu speichern, es "sh", "-c", "\"ls | wc\"" aber das Ergebnis ist dasselbe. command ist char * wo vollständige Befehlszeile gespeichert wird.

        boost::shared_array<const char *> bargv(new const char *[tokenized_command.size() + 1]);
        const char **argv = bargv.get();
        for(int i = 0; i < tokenized_command.size(); ++i)
        {
            argv[i] = tokenized_command[i].c_str();
            printf("argv[%d]: %s\n", i, argv[i]); //trace
        }
        argv[tokenized_command.size()] = NULL;

        if(execvp(argv[0], (char * const *)argv) == -1)
        {
            fprintf(stderr, "Failed to execute command %s: %s", command, strerror(errno));
            _exit(EXIT_FAILURE);
        }

P. S.

Weiß ich, dass mit system(command) statt execvp mein problem lösen kann. Aber system() wartet, bis der Befehl beendet ist, und das ist nicht gut genug für mein Programm. Und auch ich bin mir sicher, dass bei der Umsetzung von system() einer der exec-Familie-Funktionen verwendet wird, so kann das problem gelöst werden, über exec als gut, aber ich weiß nicht, wie.

Bitte geben Sie einige code zeigt, wie Sie den shell-Befehl, und für die Erhebung der Ergebnis-und exit-status.
Ich wollte nicht sehen, alles, was mit der c oder c++ - tags, so dass ich entfernt Sie.
Ich habe etwas im Zusammenhang mit der c und c++.

InformationsquelleAutor Mihran Hovsepyan | 2011-04-12

Schreibe einen Kommentar