use IO::Termios ();
my $handle = IO::Termios->open('/tmp/fakepty', '4800,8,n,1')
or die "IO::Termios->open: $!";
while (<$handle>) { # read the port line-by-line
chomp;
print time." <$_>\n";
# write something to the port
print {$handle} "Three!\n" if /3/;
}
close $handle;
####
# connect the fake pty to a process that generates output
$ socat pty,raw,echo=0,link=/tmp/fakepty \
exec:'perl -e "$|=1;while(1){print q{Foo },$x++,qq{\n};sleep 2}"'
# connect the fake pty to the current terminal
$ socat pty,raw,echo=0,link=/tmp/fakepty -,icanon=0,min=1
##
##
use Fcntl qw/:DEFAULT/;
use IO::Termios ();
use IO::Stty ();
sysopen my $fh, '/tmp/fakepty', O_RDWR or die "sysopen: $!";
my $handle = IO::Termios->new($fh) or die "IO::Termios->new: $!";
$handle->set_mode('4800,8,n,1');
IO::Stty::stty($handle, qw/ raw -echo /);
my $tosend = "Hello, World!\n";
$handle->syswrite($tosend)
== length($tosend) or die "syswrite";
for (1..3) {
my $toread = 1;
$handle->sysread(my $in, $toread)
== $toread or die "sysread";
print "Read $_: <$in>\n";
}
$handle->close;