NAME "IO::Termios" - supply termios(3) methods to "IO::Handle" objects SYNOPSIS use IO::Termios; my $term = IO::Termios->open( "/dev/ttyS0" ) or die "Cannot open ttyS0 - $!"; $term->setbaud( 9600 ); $term->setcsize( 8 ); $term->setparity( 'n' ); $term->setstop( 1 ); $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 ) Open the given path, and return a new "IO::Termios" object around the filehandle. If the "open" call fails, "undef" is returned. 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 ); $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_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. 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 ); * Some sort of combined baud/csize/parity/stop getting/setting method $term->setline( "38400,8,n,1" ); * 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