On Wed, 3 Mar 2021 16:11:30 +0100 Nitro Vent wrote: > I have two .Net console applications targeting .Net Framework 4.7.2, > "produce.exe" and "consume.exe" with their respective sources > > using System;using System.Threading; > namespace Produce > { > class Program > { > static void Main(string[] args) > { > Thread.Sleep(100); > Console.WriteLine("Hello World."); > } > } > } > > and > > using System; > namespace Consume > { > class Program > { > static void Main(string[] args) > { > var input = Console.In.ReadToEnd(); > Console.WriteLine(input); > } > } > } > > Running > > $ ./produce.exe | ./consume.exe > > in Cygwin Terminal I expect the output to be > > Hello World. > > But there is no output and the second process, consume.exe, hangs at > ReadToEnd(). > This was verified by looking at the running processes with ps aux when > running the consume.exe in the background as well as by attaching the > Visual Studio debugger. > > Piping produce.exe into cat works correctly. > Piping some more content into consume.exe also fails (e.g. find * /usr | > consume) > Executing the same command in Windows Command works correctly. > > Notice that piping into consume.exe works if there is no delay in the > producer.
I looked into this problem and found it seems that the problem is due to the pipe mode. Cygwin pipe is set FILE_FLAG_OVERLAPPED and PIPE_TYPE_MESSAGE (by default). According to my test, this test case works only if the pipe between produce.exe and consume.exe is PIPE_TYPE_BYTE and not FILE_FLAG_OVERLAPPED set. I am not sure how the issue can be fixed. -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple