Ich entwickle ein interaktives Programm, das Eingaben vom Benutzer (über stdin) nimmt und Daten entsprechend ausgibt (mit stdout). Während das Programm läuft, muss ich eine Hintergrundanwendung öffnen (und sie laufen lassen, während das Hauptprogramm läuft). Ich habe dies erfolgreich mit popen (mit dem "r" -Modus) gemacht, aber manchmal bekomme ich stdin Konflikte. Wenn der Benutzer beispielsweise eine Eingabe eingibt, die für das Hauptprogramm bestimmt ist, behandelt das Programm dies manchmal als eine Eingabe für das Hintergrundprogramm. Der Benutzer sollte niemals direkt mit dem Hintergrundprogramm interagieren müssen. Gibt es eine Möglichkeit, sowohl die Eingabe als auch die Ausgabe des Hintergrundprogramms von stdin und stdout vollständig zu entkoppeln und trotzdem mit einem Dateideskriptor zum Hintergrundprozess zu lesen und zu schreiben?Wie öffne ich einen Prozess in C++ mit popen ohne Eingabe und Ausgabe an stdin?
0
A
Antwort
1
Code genau das, was Sie brauchen. Die Funktion popen
ist eine Komfortfunktion, mit der Sie genau das ausführen können, was Sie gerade benötigen. Ansonsten verwenden Sie pipe
, fork
, dup2
, close
und was auch immer exec
-Familie Funktion Sie wollen.
Sie können es hilfreich finden, ein paar Implementierungen von popen/pclose zu sehen, um zu sehen, wie sie funktionieren. Passen Sie wie erforderlich an.
1
Verwenden Sie einfach nicht popen
. Verwenden Sie stattdessen fork
+ eine der exec
Familie von Funktionen, die die Io-Streams nicht verbindet.
Verwandte Themen
- 1. Prozess Stdin mit C
- 2. einen Prozess in pythonw mit Popen Laufen ohne Konsole
- 3. C++ popen() 's Ausgabe in eine Zeichenfolge
- 4. Wie STDIN an Kind Prozess übergeben?
- 5. Wie kann ich einen remote Prozess in .NET aufrufen, der die Eltern stdin und stdout erbt
- 6. Interaktive Eingabe/Ausgabe mit Python
- 7. Python Popen senden an stdin verarbeiten, empfangen auf stdout
- 8. mit FIFOs für Eingabe und Ausgabe in Python
- 9. Wie höre ich die STDIN-Eingabe an, ohne mein Skript zu unterbrechen?
- 10. Wie steuert man Popen Stdin, Stdout, Stderr Umleitung?
- 11. Wie reproduziere ich `stdin = sys.stdin` mit` stdin = PIPE`?
- 12. Wie erstelle ich eine Pipe mit Popen und kommuniziere durch sie in Python?
- 13. python - wie die Ausgabe mit popen pipe?
- 14. Schreiben an den erzeugten Prozess stdin nodejs?
- 15. Cross-Plattform-Umleitung von Standard-Eingabe und Ausgabe von erzeugten Prozess in nativem C/C++ (bearbeiten mit Lösung)
- 16. Os/exec elegant, schleifenkompatibel stdin und stdout Eingabe/Ausgabe
- 17. C/C++ Eingabe aus dem Programm in stdin hinzufügen?
- 18. C - Popen zeigt keine richtige Ausgabe
- 19. Prozess stdin und stdout zu netcat umleiten
- 20. einen Prozess beenden, der mit popen gestartet wurde
- 21. Wie kann ich STDIN testen, ohne in Perl zu blockieren?
- 22. Wie bekomme ich die Ausgabe von Prozess geöffnet von Popen in PHP?
- 23. Wie Übergeben von STDIN an den untergeordneten Prozess node.js
- 24. Wie wird die Eingabe in einen src_block als stdin geleitet?
- 25. Wie werden Stdin und Stdout für den Prozess einzigartig gemacht?
- 26. Wie Parameter an einen anderen Prozess in C# passieren
- 27. ruby popen3 - Wie wiederhole ich auf stdin & lese stdout ohne re-opening process?
- 28. Wie starte ich einen Prozess korrekt und übergebe stdin/stdout/stderr?
- 29. Java laufender Bash-Befehl beim Einspeisen und Eingabe der Ausgabe
- 30. bekommen Eingabe von stdin
Wenn Sie 'popen()' verwenden, können Sie entweder lesen oder schreiben, nicht beides. Wie schreibst du in das Hintergrundprogramm? – Barmar
Err, das ist, was 'popen()' * für * ist. Wenn Sie das nicht wollen, benutzen Sie es nicht. Aber es scheint, dass das, was Sie wirklich brauchen, 'popen()' im Lese-Schreib-Modus ist, so dass die 'stdin' * des Zielprozesses umgeleitet wird, weg von der Konsole. – EJP