Fast alle pipe
Beispiele, die ich Beratung gesehen habe schließen die unbenutzte Schreib/Lese endet. Auch Mann sagt eindeutig, dass pipe() creates a pipe, a unidirectional data channel
Aber ich habe versucht, zu lesen und zu beiden Enden des Rohres sowohl im Elternteil als auch im Kind zu schreiben, und alles scheint in Ordnung zu sein.Warum kann eine mit der Funktion pipe() erstellte Pipe nicht als bidirektionale Pipe verwendet werden?
Also meine Zweifel ist, warum brauchen wir 2 Rohre, wenn zwei Prozesse müssen beide lesen und miteinander zu schreiben und warum nicht tun Sie es mit einem einzigen Rohr?
Weil die Leute, die zuerst pipe() implementierten, es unidirektional machten, das dann ein Standard für nachfolgende Implementierungen wurde. (Beachten Sie, dass bei einigen Betriebssystemen pipe() Ihnen einen bidirektionalen Stream gibt, während andere dies nicht tun). Verwenden Sie einfach 2 Pipes oder verwenden Sie socketpair(), wenn Sie eine bidirektionale Kommunikation benötigen. – nos
Die Jungs, die zuerst Rohr() eingeführt haben, statteten die Rohrleitung mit nur einem einzigen Puffer aus, der echten Rohren für die Förderung von Flüssigkeiten/Gasen ähnlich ist. Für Dual-Puffer, siehe Sockets. –
Solaris-Rohre sind bidirektional. Nicht dass eine ganze Menge Leute Solaris mehr benutzen ... einfach nur da rausschmeißen. Wie andere jedoch klarstellten, sollten Sie, wenn Sie Portabilität wünschen, diese Fähigkeit nicht übernehmen. – FatalError