In C, wie Sie umleiten von stdin/stdout/stderr in Dateien wenn Sie eine execvp() oder ähnliches aufrufen?
Ich habe den folgenden code:
pid_t pid = fork();
if (pid == -1)
{
//...
}
else if (pid == 0)
{
stdin = someopenfile;
stdout = someotherfile;
stderr = somethirdopenfile;
execvp(args[0], args);
//handle error ...
}
else
{
//...
}
Das problem ist, die Eingabe/Ausgabe von der execvp()
nennen ist noch die Konsole, anstatt die Dateien. Klar, ich mache etwas falsch, was ist der richtige Weg, dies zu tun?
InformationsquelleAutor der Frage Matt | 2013-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg, es zu tun ist, um die Datei zu ersetzen-Deskriptoren
STDIN_FILENO
STDOUT_FILENO
undSTDERR_FILENO
mit der geöffneten Dateien mitdup2()
. Sie sollten auch dann schließen Sie die original-Dateien in den child-Prozess:InformationsquelleAutor der Antwort caf
Werfen Sie einen Blick auf
freopen
Funktion.Ich hatte etwas ähnliches mit
stdout
und schrieb zwei Funktionen, die die Arbeit für mich:InformationsquelleAutor der Antwort Jack
Können Sie verwenden, wenn stdin , stdout , stderr terminal-
InformationsquelleAutor der Antwort alhelal