Tango I/O bug?

Jason House jason.james.house at gmail.com
Tue Sep 18 16:53:00 PDT 2007


You already know more than I do... even after a while trying to google 
on the topic.  What would be the right forum to even ask questions like 
that?

Sean Kelly wrote:
> For what it's worth, flush() merely writes all data buffered by Tango to 
> the underlying device.  On non-Win32 platforms, there is no actual 
> kernel call performed to force an immediate flush of the data to 
> wherever.  Is it possible that OSX does buffering within the kernel and 
> the data is lingering in there?  And if so, do you know of a routine 
> that could be called to perform a hard flush?  Typically, the commit() 
> method is used for this purpose, but it's empty on Posix systems right now.
> 
> Jason House wrote:
>> Given that enabling a flush doesn't solve the problem, what is the 
>> path forward for figuring out how to fix this?  It works on all other 
>> systems tested with dmd, but doesn't work on mac (with gdc).  (I've 
>> had big problems getting gdc and tango to play nicely with each other 
>> in a cygwin environment, but that's probably another thread)
>>
>> Jason House Wrote:
>>
>>> Sadly, this simple fix isn't the solution.  Here's what I got back 
>>> (via e-mail)...
>>>
>>>> This part is likely your problem: "It does real time communication in
>>>> plain text with a 3rd party controlling application"
>>>> That probably means the output is redirected and not sent to an actual
>>>> console, right?
>>>> The default behavior for Stdout is to auto-flush only if the output is
>>>> sent to an actual console (i.e. isn't redirected).
>>> Well, it is sent to an actual console. I mean I just start housebot
>>> by hand
>>> and interact with it.
>>>
>>>> To make sure flushing occurs, execute "Stdout.flush = true;" somewhere
>>>> at the start of your program (main(), a static this(), or just right
>>>> before the first output).
>>> I tried that. I added the import for tango.io.Stdout to housebot.d
>>> and added
>>> "Stdout.flush = true;" at the beginning of main(), just after the
>>> variable
>>> declarations. But nothing changed.
>>


More information about the Digitalmars-d-learn mailing list