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 `B*nnn*' 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