NAME
IO::Termios
- supply termios(3) methods to IO::Handle
objects
SYNOPSIS
use IO::Termios;
my $term = IO::Termios->open( "/dev/ttyS0", "9600,8,n,1" )
or die "Cannot open ttyS0 - $!";
$term->print( "Hello world\n" ); # Still an IO::Handle
while( <$term> ) {
print "A line from ttyS0: $_";
}
DESCRIPTION
This class extends the generic IO::Handle
object class by providing methods which access the system's terminal control termios(3)
operations.
CONSTRUCTORS
$term = IO::Termios->new()
Construct a new IO::Termios
object around the terminal for the program. This is found by checking if any of STDIN
, STDOUT
or STDERR
are a terminal. The first one that's found is used. An error occurs if no terminal can be found by this method.
$term = IO::Termios->new( $handle )
Construct a new IO::Termios
object around the given filehandle.
$term = IO::Termios->open( $path, $modestr )
Open the given path, and return a new IO::Termios
object around the filehandle. If the open
call fails, undef
is returned.
If $modestr
is provided, the constructor will pass it to the set_mode
method before returning.
METHODS
$attrs = $term->getattr
Makes a tcgetattr()
call on the underlying filehandle, and returns a IO::Termios::Attrs
object.
If the tcgetattr()
call fails, undef
is returned.
$term->setattr( $attrs )
Makes a tcsetattr()
call on the underlying file handle, setting attributes from the given IO::Termios::Attrs
object.
If the tcsetattr()
call fails, undef
is returned. Otherwise, a true value is returned.
FLAG-ACCESSOR METHODS
Theses methods are implemented in terms of the lower level methods, but provide an interface which is more abstract, and easier to re-implement on other non-POSIX systems. These should be used in preference to the lower ones.
For efficiency, when getting or setting a large number of flags, it may be more efficient to call getattr
, then operate on the returned object, before possibly passing it to setattr
. The returned IO::Termios::Attrs
object supports the same methods as documented here.
The following two sections of code are therefore equivalent, though the latter is more efficient as it only calls setattr
once.
$term->setbaud( 38400 );
$term->setcsize( 8 );
$term->setparity( 'n' );
$term->setstop( 1 );
my $attrs = $term->getattr;
$attrs->setbaud( 38400 );
$attrs->setcsize( 8 );
$attrs->setparity( 'n' );
$attrs->setstop( 1 );
$term->setattr( $attrs );
However, a convenient shortcut method is provided for the common case of setting the baud rate, character size, parity and stop size all at the same time. This is set_mode
:
$term->set_mode( "38400,8,n,1" );
$baud = $term->getibaud
$baud = $term->getobaud
$term->setibaud( $baud )
$term->setobaud( $baud )
$term->setbaud( $baud )
Convenience accessors for the ispeed
and ospeed
. $baud
is an integer directly giving the line rate, instead of one of the Bnnn
constants.
$bits = $term->getcsize
$term->setcsize( $bits )
Convenience accessor for the CSIZE
bits of c_cflag
. $bits
is an integer 5 to 8.
$parity = $term->getparity
$term->setparity( $parity )
Convenience accessor for the PARENB
and PARODD
bits of c_cflag
. $parity
is n
, o
or e
.
$stop = $term->getstop
$term->setstop( $stop )
Convenience accessor for the CSTOPB
bit of c_cflag
. $stop
is 1 or 2.
$mode = $term->getflag_cread
$term->setflag_cread( $mode )
Accessor for the CREAD
bit of the c_cflag
. This enables the receiver.
$mode = $term->getflag_hupcl
$term->setflag_hupcl( $mode )
Accessor for the HUPCL
bit of the c_cflag
. This lowers the modem control lines after the last process closes the device.
$mode = $term->getflag_clocal
$term->setflag_clocal( $mode )
Accessor for the CLOCAL
bit of the c_cflag
. This controls whether local mode is enabled; which if set, ignores modem control lines.
$mode = $term->getflag_icanon
$term->setflag_icanon( $mode )
Accessor for the ICANON
bit of c_lflag
. This is called "canonical" mode and controls whether the terminal's line-editing feature will be used to return a whole line (if false), or if individual bytes from keystrokes will be returned as they are available (if true).
$mode = $term->getflag_echo
$term->setflag_echo( $mode )
Accessor for the ECHO
bit of c_lflag
. This controls whether input characters are echoed back to the terminal.
$term->set_mode( $modestr )
$modestr = $term->get_mode
Accessor for the derived "mode string", which is a comma-joined concatenation of the baud rate, character size, parity mode, and stop size in a format such as
19200,8,n,1
When setting the mode string, trailing components may be omitted meaning their value will not be affected.
TODO
Adding more getflag_*/setflag_* convenience wrappers
Automatically upgrading STDIN/STDOUT/STDERR if appropriate, given a flag.
use IO::Termios -upgrade; STDIN->setflag_echo( 0 );
Modem line control, via
TCIOM{GET,SET,BIS,BIC}
. Annoyingly it doesn't appear this is available without XS code.
SEE ALSO
IO::Tty - Import Tty control constants
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>