On Saturday, 30 January 2016 at 15:57:49 UTC, Griffon26 wrote:
On Saturday, 30 January 2016 at 15:12:26 UTC, Andrew wrote:
  foreach(line; pipesLs.stdout.byLine)
    pipesSort.stdin.writeln(line);

Because you write sort's input first and read its output later, it might end up blocking if ls generates too much data. The output pipe of sort will fill up, causing sort to block and not read data from its input pipe anymore, resulting in your program blocking when the input pipe has filled up.

I have a piece of code using poll to write to two input pipes and read from one output pipe, but it's a bit more complex than what you need. However, it also uses pipeShell to specify multiple commands at once. Since your program only needs to read the output (and not generate input), you may find pipeShell useful.

https://github.com/Griffon26/tdiff3/blob/87709dd51c279e9896f37ba1cef477a525e44562/source/gnudiff.d

Disclaimer: I'm not an experienced D programmer. My D code may not be pretty =)

pipeShell did the trick.

Thank you very much!

Andrew

Reply via email to