No, primary reason to use sysread/syswrite with select, is because readline and print are not working with select.
Of course they do:
#! perl -sw
use strict;
use Win32::Socketpair qw[ winsocketpair ];
my( $fd1, $fd2 ) = winsocketpair();
my $v = '';
vec( $v, my $fn1 = fileno( $fd1 ), 1) = 1;
vec( $v, my $fn2 = fileno( $fd2 ), 1) = 1;
while( 1 ) {
if( select( my $vin = $v, my $vout = $v, undef, undef ) > 0 ) {
if( vec( $vout, $fn1, 1 ) ) {
print( $fd1 "hello\n" ) or last;
}
if( vec( $vin, $fn2, 1 ) ) {
defined( my $buffer = <$fd2> ) or last;
print "read: $buffer";
}
}
}
__END__
C:\test>junk88
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
read: hello
Terminating on signal SIGINT(2)
read: hello
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] |
Yes, they do!
print is just syswrite + a little; readline is just sysread with a loop looking for the current value of $/.
In other words, your wrappers are exactly equivalent to those built-ins; except that they are in C and thus vastly more efficient; and well tried and tested thus more likely to be correct.
As for that; there is a huge difference between quoting the manual and understanding what it says.
The *ONLY REASON* print and readline are said to "not work with select", is because they will block if they receive a partial message, thus preventing the code from getting back to the select. IE. They do exactly what your wrappers do; except they're more likely correct.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] |