Serial line I/O, DMC, sysopen( $path, O_RDWR) , select()
#!/usr/bin/perl -w
use strict;
use POSIX qw(:termios_h);
use FileHandle;
my $buffer= " " x 100;
my ($nfd);
#
# has107k: cua0 is the upper connector
#
sysopen( DMC, "/dev/cua0", O_RDWR);
my $fd = fileno( DMC);
my $term = POSIX::Termios->new;
$term->getattr( $fd);
$term->setospeed( &POSIX::B19200);
$term->setispeed( &POSIX::B19200);
my $lflag = $term->getlflag();
$term->setlflag( $lflag & ~(POSIX::ECHO));
my $c_cflag = $term->getcflag();
$term->setcflag( $c_cflag | &POSIX::CS8);
$term->setattr( $fd, &POSIX::TCSANOW);
while()
{
print " Enter> ";
$buffer = <>;
goto finish if( $buffer =~ /bye/i);
if( length( $buffer))
{
$buffer .= "\n";
syswrite( DMC, $buffer, length( $buffer), 0);
}
$nfd = 1;
while( $nfd)
{
my $rin = my $win = my $ein = "";
vec( $rin, fileno( DMC), 1) = 1;
$ein = $rin | $win;
$nfd = select( $rin, $win, $ein, 0.1);
if( $nfd)
{
sysread( DMC, $buffer, 100, 0);
$buffer =~ s/^\s*(.*?)\s*$/$1/;
if( length( $buffer))
{
print " $buffer \n";
}
}
}
}
finish:
close DMC;