stdin von Prozess mit bekannter PID herausbekommen
-
Ich brauche eure Hilfe:
Ich möchte einen Prozess, der mit z.B getchar auf eine Eingabe wartet von einem anderen Prozess/anderer Konsole ein z.B Char schicken. Ich kenne die PID vom wartenden Prozess. Gibt es nun eine Möglichkeit mit Hilfe der PID den STDIN-Stream herauszufinden, so dass ich mein Kommando schicken kann?
Ich habe es schon mit einer Pipe und einem Fifo versucht. Das problem ist nur, wenn ich das wartende Programm mit "programm" < fifo.in starte reagiert es nicht mehr auf normale Konsolen-Eingaben, da stdin nun auf fifo.in umgeleitet wurde, dafür kann ich im Kommandos schicken wie echo "c" > fifo.in. Gibt es eine Möglichkeit mein Programm so zu starten, dass es auf Konsoleneingabe und auf mein fifo.in hört?
Auch das schicken des Kommandos durch echo "c" > /proc/PID/fd/0 funktioniert nicht.
Würde mich über Hilfe sehr freuen!
-
Du kannst ne Fifo auch einfach als "extra" File öffnen
int fd; /* wartet bis FIFO zum schreiben geöffnet wird */ fd = open("/tmp/fifo.myprog", O_RDONLY);
Gibt es eine Möglichkeit mein Programm so zu starten, dass es auf Konsoleneingabe und auf mein fifo.in hört?
Klingt so als ob du sowas wie select()/poll() und nach Nonblocking I/O suchst.
mfg
-
improvisator schrieb:
Gibt es eine Möglichkeit mein Programm so zu starten, dass es auf Konsoleneingabe und auf mein fifo.in hört?
schau mal nach der Funktion select(...).
Andere Möglichkeit auch mehrere Threads oder Prozesse zu benutzen. Kommt halt drauf an was Du machen willst. Ich denk aber dass select(...) Deine Wünsche erfüllen wird.