*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> ptm (4)              
Title
Content
Arch
Section
 

PTY(4)

Contents


NAME    [Toc]    [Back]

     pty - pseudo terminal driver

SYNOPSIS    [Toc]    [Back]

     pseudo-device pty [count]

DESCRIPTION    [Toc]    [Back]

     The pty driver provides support for a device-pair  termed  a
pseudo
     terminal.  A pseudo terminal is a pair of character devices,
a master device
 and a slave device.  The slave  device  provides  to  a
process an interface
  identical  to  that  described in tty(4).  However,
whereas all other
 devices which provide the interface described  in  tty(4)
have a hardware
  device of some sort behind them, the slave device has,
instead, another
 process manipulating it through the master half of the
pseudo terminal.
   That  is,  anything written on the master device is
given to the
     slave device as input and anything written on the slave  device is presented
 as input on the master device.

     In  configuring, if an optional count is given in the specification, space
     for that number of pseudo terminal  pairs  is  preallocated.
If the count
     is  missing or is less than 2, a default count of 8 is used.
This is not
     a hard limit--space for additional pseudo terminal pairs  is
allocated on
     demand  up  to  the  limit  imposed  by the kern.tty.maxptys
sysctl(8) (992 by
     default).

     The following ioctl(2) calls apply only to pseudo terminals:

     TIOCSTOP     Stops  output  to a terminal (e.g., like typing
`^S').  Takes
                 no parameter.

     TIOCSTART   Restarts output (stopped by TIOCSTOP or by  typing `^S').
                 Takes no parameter.

     TIOCPKT      Enable/disable packet mode.  Packet mode is enabled by specifying
 (by reference) a  non-zero  parameter  and
disabled by
                 specifying  (by  reference)  a  zero  parameter.
When applied to
                 the master side of a pseudo terminal, each  subsequent read(2)
                 from  the  terminal  will return data written on
the slave part
                 of the pseudo terminal preceded by a  zero  byte
(symbolically
                 defined  as  TIOCPKT_DATA), or a single byte reflecting control
                 status information.  In  the  latter  case,  the
byte is an inclusive-or
 of zero or more of the bits:

                 TIOCPKT_FLUSHREAD    whenever the read queue for
the terminal
                                     is flushed.

                 TIOCPKT_FLUSHWRITE  whenever the write queue for
the terminal
                                     is flushed.

                 TIOCPKT_STOP         whenever output to the terminal is
                                     stopped a la `^S'.

                 TIOCPKT_START       whenever output to the  terminal is
                                     restarted.

                 TIOCPKT_DOSTOP      whenever t_stopc is `^S' and
t_startc is
                                     `^Q'.

                 TIOCPKT_NOSTOP      whenever the start and  stop
characters
                                     are not `^S/^Q'.

                                     While  this  mode is in use,
the presence
                                     of control  status  information to be read
                                     from  the master side may be
detected by a
                                     select(2)  for   exceptional
conditions.

                                     This  mode is used by rlogin
and rlogind
                                     to   implement   a   remoteechoed, locally
                                     `^S/^Q'  flow-controlled remote login with
                                     proper back-flushing of output; it can be
                                     used  by  other similar programs.

                 TIOCPKT_IOCTL       When this bit  is  set,  the
slave has
                                     changed    the    termios(4)
structure (TTY
                                     state), and the remainder of
the data
                                     read from the master side of
the pty is a
                                     copy of the  new  termios(4)
structure.

                                     This  is  used by telnetd(8)
to implement
                                     TELNET "line mode" - it  allows the
                                     telnetd(8)  to detect tty(4)
state changes
                                     by the slave, and  negotiate
the appropriate
  TELNET protocol equivalents with the
                                     remote peer.

     TIOCUCNTL   Enable/disable a mode that allows a small number
of simple
                 user  ioctl(2) commands to be passed through the
pseudo terminal,
 using a protocol similar to that of  TIOCPKT.  The
                 TIOCUCNTL  and TIOCPKT modes are mutually exclusive.  This
                 mode is enabled from the master side of a pseudo
terminal by
                 specifying  (by  reference)  a nonzero parameter
and disabled by
                 specifying  (by  reference)  a  zero  parameter.
Each subsequent
                 read(2)  from  the  master side will return data
written on the
                 slave part of the pseudo terminal preceded by  a
zero byte, or
                 a  single  byte reflecting a user control operation on the
                 slave side.  A user control command consists  of
a special
                 ioctl(2)  operation with no data; the command is
given as
                 UIOCCMD(n), where n is a  number  in  the  range
1-255.  The operation
  value  n  will  be received as a single
byte on the next
                 read(2) from  the  master  side.   The  ioctl(2)
UIOCCMD(0) is a
                 no-op  that  may  be used to probe for the existence of this facility.
  As with TIOCPKT  mode,  command  operations may be detected
  with  a select(2) for exceptional conditions.

     TIOCREMOTE  A mode for the master half of a pseudo terminal,
independent
                 of TIOCPKT.  This mode causes input to the pseudo terminal to
                 be flow controlled and not input edited (regardless of the
                 terminal  mode).  Each write to the control terminal produces
                 a record boundary for the  process  reading  the
terminal.  In
                 normal  usage,  a write of data is like the data
typed as a
                 line on the terminal; a write of 0 bytes is like
typing an
                 end-of-file  character.   TIOCREMOTE can be used
when doing remote
 line editing in a window manager, or  whenever flow controlled
 input is required.

     The   standard  way  to  allocate  pty  devices  is  through
openpty(3), a function
 which internally uses a PTMGET  ioctl(2)  call  on  the
/dev/ptm device.
     The PTMGET command allocates a free pseudo terminal, changes
its ownership
 to the caller, revokes the access  privileges  for  all
previous users,
     opens  the file descriptors for the master and slave devices
and returns
     them to the caller in struct ptmget.

           struct ptmget {
                   int     cfd;
                   int     sfd;
                   char    cn[16];
                   char    sn[16];
           };

     The cfd and sfd fields are the file descriptors for the controlling and
     slave terminals.  The cn and sn fields are the file names of
the controlling
 and slave devices.

FILES    [Toc]    [Back]

     /dev/pty[p-zP-T][0-9a-f]   master pseudo terminals
     /dev/tty[p-zP-T][0-9a-f]   slave pseudo terminals
     /dev/ptm                   pseudo terminal management device

SEE ALSO    [Toc]    [Back]

      
      
     openpty(3), tty(4), sysctl(8)

HISTORY    [Toc]    [Back]

     The  pty driver appeared in 4.2BSD.  The /dev/ptm device was
added in
     OpenBSD 3.5.

CAVEATS    [Toc]    [Back]

     The ptm device will only work on systems where the /dev  directory has
     been  properly  populated with pty(4) device nodes following
the naming
     convention used in OpenBSD. Since ptm impersonates the super
user for
     some  operations it needs to perform to complete the allocation of a pseudo
 terminal, the /dev directory must also  be  writeable  by
the super user.

OpenBSD      3.6                        November     30,     1993
[ Back ]
 Similar pages
Name OS Title
pts HP-UX STREAMS slave pty (pseudo-terminal) driver
ptm HP-UX STREAMS master pty (pseudo-terminal) driver
telm HP-UX STREAMS Telnet slave (pseudo-terminal) driver, STREAMS Telnet master driver (used by telnetd only), respective
tels HP-UX STREAMS Telnet slave (pseudo-terminal) driver, STREAMS Telnet master driver (used by telnetd only), respective
unlockpt FreeBSD pseudo-terminal access functions
ptsname FreeBSD pseudo-terminal access functions
posix_openpt FreeBSD pseudo-terminal access functions
grantpt FreeBSD pseudo-terminal access functions
ptsname IRIX get name of the slave pseudo-terminal device
pty FreeBSD auxiliary functions to obtain a pseudo-terminal
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service