Who's using "CYGWIN=tty" and why?

Edward Lam edward@sidefx.com
Wed May 11 15:02:00 GMT 2011


On 5/11/2011 2:34 AM, Corinna Vinschen wrote:
> Kind of weird.  The difference is that in tty mode the stdio handles are
> pipes, while in the notty case the stdio handles are console handles.
> Usually native Windows applications shouldn't see a difference and even
> work *better* in notty mode.

One problem I ran into was with *Windows mode* applications (ie. MS 
link.exe option /SUBSYSTEM:windows) trying to detect stdout redirection. 
I apologize that this takes a bit of explaining first as to why we run 
into a problem with Cygwin.

For Windows-mode applications, _isatty(_fileno(stdout)) will always 
return false. Due to a bug (in Windows and/or the CRT), the FILE *stdout 
object will be initialized to a black hole. So if you want printf's to 
make its way into the redirected file, you have to manually connect the 
FILE *stdout object to the redirected file output handle.

The usual method is to call GetStartupInfo(&info) and check if 
info.dwFlags has the STARTF_USESTDHANDLES flag set. If it is set, then 
assume that info.hStdOutput contains the redirected file output handle 
and attach it with something like:
    *stdout = _fdopen(_open_osfhandle(info.hStdOutput, _O_TEXT));

So this brings us to Cygwin. When we spawn such a Windows mode app from 
Cygwin, the method I describe above fails. The call to 
_open_osfhandle(info.hStdOutput, _O_TEXT) returns with an error value of 
-1. This is likely why jam reports "the handle is invalid".

Personally, when I first ran into this problem, I never realized that 
CYGWIN=tty would fix it. I did notice that there was a change in the 
behavior between Cygwin B20 and the Cygwin 1.X releases but I only 
realize now that this was probably the reason.

Regards,
-Edward

--
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



More information about the Cygwin mailing list