Cannot call @system funciton (stdout)

Paul Backus snarwin at
Sat Sep 19 14:14:46 UTC 2020

On Saturday, 19 September 2020 at 13:56:53 UTC, Anonymouse wrote:
> On Saturday, 19 September 2020 at 13:32:07 UTC, Paul Backus 
> wrote:
> Thanks.
> I don't have a clone of druntime/Phobos available to me right 
> now, so some follow-up questions.
> It looks like full buffering _IOFBF is the default setting, but 
> "normal" non-Cygwin stdio certainly seems to do line buffering. 
> Is it getting set to line buffering _IOLBF during 
> initialisation of stdout? (Why then is Cygwin exempt?)

This isn't a druntime/Phobos thing, it's a libc thing. Phobos 
just provides a wrapper around it.

My guess is that libc uses something like `isatty(STDOUT_FILENO)` 
to determine if it should use line buffering, and that there's a 
bug in Cygwin that causes isatty() to always return false. If you 
want to know for sure, you can try looking through the Cygwin 
source code. [1]

> Is there a way to detect programmatically if I'm in an 
> environment where I need to manually set line buffering?

You can check the TERM environment variable [2], or you can use 
the POSIX uname() function [3] to see if you're running under 
Cygwin specifically. If there are any other environments where 
you need to manually set line-buffering, you'll probably have to 
check for those individually as well.


More information about the Digitalmars-d-learn mailing list