PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IPC, Ausgabenpuffer? Bitte dringend helfen!



7.e.Q
06.05.04, 11:40
Hi Leude,

folgendes Problem, bitte intensiv lesen, brauche dringend Unterstützung dahingehend:



Childausgabe -> /dev/ttyrf -> nettty -> TCP-Port -> Parent liest

funktioniert



Childausgabe -> named pipe -> Parent liest

funktioniert nicht

Die erste Variante besteht aus einem Parent-Prozess, der sich auf einen von nettty zur Verfügung gestellten TCP-Port verbunden hat. Nettty liefert an diesen Port alle Ausgaben, die ein Programm in das für Nettty angegebene TTY macht (in diesem Fall ttyrf). Das Programm, das diese Ausgaben liefert, ist ein Child-Prozess des gerade genannten Parents. Diese Variante der Interprozess-Kommunikation funktionierte einwandfrei, bis ich das Programm auf einem LFS einsetzen musste, das kein /dev/ttyrf kennt. Die Ausgaben kamen alle in Echtzeit im Parent an (select() meldet zeitgleich mit der Ausgabe des Childs anstehende Daten im Parent, auslesen dieser Daten ergaben die Ausgaben des Childs, so soll es sein). Alle anderen ttys funktionieren in der genannten Variante nicht.

Variante zwei - und da liegt der Hintergrund dieses Romans - funktioniert soweit auch, was die Ankunft der Child-Ausgaben im Parent anbelangt, jedoch mit einem mehr als entscheidenden Nachteil: die Ausgaben erscheinen im Parent nicht sofort nach der Child-Ausgabe, sondern erst nach Beendigung des Childs und nach Abfrage des Status des Child-Prozesses per waitpid.

Wie bekomme ich es nun hin, daß die Meldungen, die der Child per printf auf seine Standard-Ausgabe packt, im selben Moment der Ausgabe im Parent in einer Pipe oder ähnlchem zur Verfügung stehen, und nicht erst nach der Beendigung des Child-Prozesses und der Abfrage dessen Status?

Komplizierte Thematik, ich weiß, aber bitte erklär mir jemand, woran das liegt! Ich hühner damit schon seit über einem Jahr herum und bin jetzt auf eben jenes massive Problem gestoßen, daß /dev/ttyrf nicht mehr existiert und somit nettty nicht mehr lauffähig ist. Variante 1 funktioniert also nicht mehr. Variante 2 muss jetzt entsprechend zum Laufen gebracht werden. Aber... wie?

Danke!

Gruß,
Hendrik

ZuXeZ
06.05.04, 13:22
mag dir jetz vielleicht nich so wirklich weiterhelfen, aber kannst du nich den special device ttyrf per mknod erstellen? mit den selben daten von dem system wo es vorhanden ist? dann sollte doch eigentlich nettty auch wieder funzen?

7.e.Q
06.05.04, 13:32
Hab ich schon gemacht. Ein

echo bla >/dev/ttyrf

endet aber in einem I/O-Error. Genau so reagiert nettty. Daher auch das Problem.