develooper Front page | perl.perl5.porters | Postings from May 2003

Re: Meaning of sysread()

Thread Previous | Thread Next
From:
Nick Ing-Simmons
Date:
May 30, 2003 02:10
Subject:
Re: Meaning of sysread()
Message ID:
20030530091016.1703.5@bactrian.elixent.com
Kurt Starsinic <kstar@cpan.org> writes:
>On May 24, Ton Hospel wrote:
>> Or if you must for backward compatibility on windows,
>> (though personally i'd consider \r\n games on sysread
>> a windows bug), at least define sysread on a
>> binmode handle to be *ALWAYS* byte semantics.
>
>    Just once more, I'd like to assert that sysread() should do
>whatever C's read() does, however weird or broken that may or may
>not be on any given platform.  Its only usefulness that I can see
>is to "do a read that works the same as in my C program".

The snag here is what read() does in your Win32 C program depends 
on how you open()ed it. 

For sysread() the fd was open()ed to suit <$fh>  via the layer stack.
In 5.8.0 this means fd is in binary mode NOT doing the CRLF translation
as :crlf layer does that. Then sysread() calls read(2) and gets binary 
data and Win32 users are surprised. (In perl5.6 the fd is opened in O_TEXT 
mode as that is how 5.6 via Win32's stdio does CRLF stuff.)
(Note that for historical pragmatic reasons even in perl5.6 sockets
are "opened" as O_BINARY.)

It would be easy enough to make sysopen() + sysread() behave like your C
program. 

-- 
Nick Ing-Simmons
http://www.ni-s.u-net.com/


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About