stdin und stdout von Child Prozess umleiten



  • Hallo,

    für mein Projekt wurde mir empfohlen, die Kommunikation mit Child-Prozessen so zu realisieren, dass ich deren stdout und stdin umleiten soll. Nun habe ich dazu diesen Artikel gefunden: http://www.unixwiz.net/techtips/remap-pipe-fds.html
    Erste Frage:
    Hier wird von dem Problemfall geschrieben, dass die Deskriptoren 0 und 1 noch verfügbar sein könnten. In meinem Fall werden stdin und stdou im Parent aber immer gebraucht, kann ich diesen Fall daher ignorieren?

    Zweite Frage:
    Hier wird fork() gemacht und dann was mit den Pipes, bleiben die Pipes aktiv, wenn ich den Prozess danach mit einem exec() ersetze, oder muss ich dann nochmal dup2() aufrufen?

    Dritte Frage:
    Ist garantiert, dass stdin und stdout immer 0 und 1 sind, oder sollte ich auf Nummer sicher gehen und mir die Nummern über fileno() holen?

    Grüße,
    PI



  • Hier wird von dem Problemfall geschrieben, dass die Deskriptoren 0 und 1 noch verfügbar sein könnten. In meinem Fall werden stdin und stdou im Parent aber immer gebraucht, kann ich diesen Fall daher ignorieren?

    Ja, solange du die nicht schließt (zB bei der Daemonisierung), gibt es kein Problem.

    Zweite Frage:
    Hier wird fork() gemacht und dann was mit den Pipes, bleiben die Pipes aktiv, wenn ich den Prozess danach mit einem exec() ersetze, oder muss ich dann nochmal dup2() aufrufen?

    Alle geöffneten Deskriptoren bleiben erhalten. man: dup2 würde die ja wieder nur kopieren. Es kann natürlich sein, dass die Anwendung die du mit exec startest stdin/stdout wieder manipuliert.

    Ist garantiert, dass stdin und stdout immer 0 und 1 sind, oder sollte ich auf Nummer sicher gehen und mir die Nummern über fileno() holen?

    Wenn du auf Nummer sicher gehen willst, dann nimm die Konstanten STDIN_FILENO, STDOUT_FILENO.



  • Vielen Dank 🙂


Anmelden zum Antworten