in reply to Re: Binding STDIN/STDOUT and why it doesn't work on Windoze
in thread win32/unix compatible script

Check out 67963 for more info. (My old username was satchboost.) The problem wasn't so much writing to a bound STDOUT, but selecting on a bound STDIN. *shrugs*
  • Comment on Re: Re: Binding STDIN/STDOUT and why it doesn't work on Windoze

Replies are listed 'Best First'.
Re: Re: Re: Binding STDIN/STDOUT and why it doesn't work on Windoze
by John M. Dlugosz (Monsignor) on Jul 16, 2001 at 22:54 UTC
    re select RBITS,WBITS,EBITS,TIMEOUT on STDIN: ah, now there is a difference. Under Win32, it's only implemented for sockets! So bindings and handles etc. isn't really the issue. Rather, the particular function you wanted to use doesn't work on all concrete types. Specifically, yes on sockets, no on the Console streams.

    FWIW, that's because Win32 doesn't have a function exactly like select in Unix. But the implemetation of the sockets library does, to meet the Berkley Sockets standard. But that function only works for handles created by that system.

    Win32 has WaitForMultipleObjects and if the object in question is a file handle of some kind, it will be signaled when an asyncronous operation completed; or more specifically for the Console Input device, signaled when input is available.

    The way you normally structure such a program in Windows is not nativly supported by Perl. I suppose a XS module could be written... Or, a layer to emulate the select model using a helper thread and buffers would be a bit of effort, and I guess the function was not important enough for ActiveState to worry about <g>.

    —John