PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit pipe



WWG2000
17-10-2001, 21:09
Hallo
Ich hab immer noch Schwirigkeiten mit Pipes.
In meinen Programm hab ich zwei Kinderprozesse. Die Komunikation via pipe funktioniert auch. Nur ich muss irgendwie verhindern, dass z.B in eine volle Pipe geschrieben wird.

Der Kinderprozess soll nur in die Pipe schreiben wenn dieses gewünscht ist. Der Kinderprozess darf dabei aber nicht stoppen.
Bzw. es soll nicht in die Pipe schreiben, wenn diese voll ist. (kann man dann die Pipegröße ändern?)

Ich hab mir einfach gedacht, dass ich eine zweite Pipe zum Kinderprozessor nehme, und der Elternprozess in die Pipe reinschreibt ob in die andere Pipe geschrieben werden darf. Die Daten aus meiner zusätzlichen Pipe kommen zwar bei Kind an, aber irgendwie nicht syncron.

Am aller einfachsten für meine Lösung wäre, die pipe auf eine größe wenn 50bytes oder so zu minimieren und abzufangen wann die Pipe voll ist und dann nicht mehr in die Pipe schreiben.


Besten besten dank schon mal.

Christoph
18-10-2001, 14:23
Seit wann haben Pipes eine Grösse und werden "voll"?

Dein Problem mit der Asynchronität liegt vermutlich daran, dass du bufferd IO verwendest (passiert automatisch, wenn du nicht write() und read() sondern die entsprechenden stdlib-Funktionen verwendest).

Lösung: setbuf() oder setlinebuf().

PS: Ist im Stevens ("Advanced Programming in the Unix Environment") ausführlich beschrieben.

WWG2000
18-10-2001, 18:11
Also eigentlich verwende ich read und write.

Und ich hab auch schon im Internet was zu einer vollen Pipe gelesen und hab auch schon ein Programm geschrieben wo die Pipe voll wurde.

Desweiteren versteh ich nicht ganz wie ich setbuf auf meine Pipe anweden soll. Pipe ist doch ein Array (2) und bei setbuf brauch ich eine FILE *.

Christoph
22-10-2001, 14:49
Hin- und Herwechseln zwischen Filedescriptoren und FILE* geht mit fdopen() und fileno().