This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: 1.7.10->1.7.13 : output from .NET programs does not get through pipeline to a visual c++ program
- From: <cygwin at alanhowells dot e4ward dot com>
- To: cygwin at cygwin dot com
- Date: Fri, 20 Apr 2012 11:26:36 +0100
- Subject: Re: 1.7.10->1.7.13 : output from .NET programs does not get through pipeline to a visual c++ program
- References: <CAHxe11=J=cJnwWcRnA1Pi9CmezWw+z04-b5k4trVmE3mVbiH7A@mail.gmail.com>
- Reply-to: cygwin at alanhowells dot e4ward dot com
>On 2012-04-19 16:14, Christopher Faylor wrote:
>> On Thu, Apr 19, 2012 at 12:56:33PM +0100, somebody wrote:
>>> Hi all,
>>>
>>> This started in 1.7.10 and I thought this may be fixed in 1.7.12 due
>>> to emails in the mailing list:
>>> http://sourceware.org/ml/cygwin/2012-03/msg00666.html
>>>
>>> But there still seems to be a problem piping from a .net console
>>> application to a visual c++ console application.
>>>
>>> Using the following simple C# program complied using "csc /optimize
>>> /target:exe /out:./consoleout.exe Program.cs"
>>>
>>>>>>> Begin Program.cs
>>> namespace consoleout
>>> {
>>> using System;
>>>
>>> internal static class Program
>>> {
>>> private static void Main(string[] args)
>>> {
>>> foreach (var arg in args) {
>>> Console.Out.WriteLine(arg);
>>> }
>>> }
>>> }
>>> }
>>> <<<< End Program.cs
>>>
>>> I can use this to output to cygwin exes OK
>>> $ ./consoleout.exe Hello There | cat
>>> Hello
>>> There
>>> $ ./consoleout.exe Hello There | grep ll
>>> 1:Hello
>>> $
>>>
>>> I also created a visual c++ executable like the simple one below
>>> compiled with "cl /EHs readin.cxx /link"
>>>
>>>>>>> Begin readin.cxx
>>> #include <string>
>>> #include <iostream>
>>>
>>> int
>>> main(int argc, char** argv)
>>> {
>>> static_cast<void>(argc);
>>> static_cast<void>(argv);
>>> std::string buf;
>>> buf.reserve(1024);
>>> while (std::getline(std::cin, buf, '\n')) {
>>> std::cout << buf << '\n';
>>> }
>>> return EXIT_SUCCESS;
>>> }
>>> <<<< End readin.cxx
>>>
>>> I can use this to output anything read in
>>> $ echo Hello | ./readin.exe
>>> Hello
>>> $ cat 'readin.cxx' | ./readin.exe
>>> #include <string>
>>> #include <iostream>
>>>
>>> int
>>> main(int argc, char** argv)
>>> {
>>> static_cast<void>(argc);
>>> static_cast<void>(argv);
>>> std::string buf;
>>> buf.reserve(1024);
>>> while (std::getline(std::cin, buf, '\n')) {
>>> std::cout << buf << '\n';
>>> }
>>> return EXIT_SUCCESS;
>>> }
>>> $
>>>
>>> But when combining the two, nothing happens.
>>> $ ./consoleout.exe Hello There | ./readin.exe
>>> $
>>>
>>> It "seems" as though the console out from the .net is not being
>>> correctly piped through to a vc++ program. I know that is a strange
>>> defect given all the other combinations work.
>>>
>>> The reverse works i.e. output from a visual c++ console application is
>>> piped correctly to a .net console application.
>>>
>>> This worked prior to 1.7.10 (1.7.9 and before).
>>>
>>> I am sorry that I cannot point to an area in the Cygwin code or
>>> suggest a fix, but I am hoping this is enough of a description to help
>>> someone find out what the issue is.
>>
>> Sorry but I'm not going to set up a .NET development environment to
>> figure out a problem. If someone else wants to provide a clue as
>> to what's going on, I'd appreciate it.
>
> I'll bite, and it WJFFM...
>
> $ ./consoleout hello world | ./readin
> hello
> world
> $ uname -a
> CYGWIN_NT-6.1-WOW64 PEDA-PC 1.7.13(0.260/5/3) 2012-04-05 12:43 i686 Cygwin>
>
> To stress it a tiny bit more:
> $ ./consoleout hello world | ./readin | ./readin | ./readin | ./readin
> hello
> world
> $ ./consoleout hello world | ./readin | ./readin | grep rl | ./readin | ./readin
> world
>
> Question for the OP: Does the pipe work from a cmd prompt?
>
> Cheers,
> Peter
Strange, I am using mintty and tcsh. It also fails for me in cmd/bash,
cmd/tcsh, mintty/bash.
It does work with straight forward cmd prompt, no cygwin shells. I am
using 32bit windows 7 though, not sure if that helps.
$ uname -a
CYGWIN_NT-6.1 F1N6LQ1 1.7.13(0.260/5/3) 2012-04-05 12:43 i686 Cygwin
Perhaps a little bit more about development environment?
Using VS2010 C# 4.0 (VS2008 fails to work as well using C# 3.0 and C# 2.0)
OK, while writing this I did test this on a 64bit windows and I get
the same result, no output from readin.
My original post has the cygcheck output, is there any major
difference between your configuration and mine there? I am more than
happy to try out various options that might fix or even help work out
what is going on.
Alan
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple