ptm - STREAMS pseudo-tty master driver


     The pseudo-tty subsystem simulates  a  terminal  connection,
     where  the master side represents the terminal and the slave
     represents the user process's special device end  point.  In
     order to use the pseudo-tty subsystem, a node for the master
     side driver /dev/ptmx and N number of nodes  for  the  slave
     driver must be installed. See pts(7D).  The master device is
     set up as a  cloned device where its major device number  is
     the  major  for the clone device and its minor device number
     is the major for the ptm driver. There are no nodes  in  the
     file  system for master devices. The master pseudo driver is
     opened using the open(2) system call with /dev/ptmx  as  the
     device  parameter.  The  clone open finds the next available
     minor device for the ptm major device.

     A master device is available only if it and its  correspond-
     ing  slave device are not already open. When the master dev-
     ice is opened, the corresponding slave device  is  automati-
     cally  locked out. Only one open is allowed on a master dev-
     ice.  Multiple opens are allowed on the slave device.  After
     both the master and slave have been opened, the user has two
     file descriptors which are the end points of a  full  duplex
     connection  composed  of two streams which are automatically
     connected at the master and slave drivers. The user may then
     push modules onto either side of the stream pair.

     The master and slave drivers  pass  all  messages  to  their
     adjacent  queues.   Only  the M_FLUSH needs some processing.
     Because the read queue of one side is connected to the write
     queue of the other, the FLUSHR flag is changed to the FLUSHW
     flag and vice versa.  When the master device  is  closed  an
     M_HANGUP  message  is  sent  to  the slave device which will
     render the device unusable. The process on  the  slave  side
     gets  the  errno EIO when attempting to write on that stream
     but it will be able to read any data remaining on the stream
     head  read  queue.  When  all the data has been read, read()
     returns 0 indicating that the stream can no longer be  used.
     On the last close of the slave device, a 0-length message is
     sent to the master device. When the application on the  mas-
     ter  side issues a read() or getmsg() and 0 is returned, the
     user of the master device decides whether to issue a close()
     that dismantles the pseudo-terminal subsystem. If the master
     device is not  closed,  the  pseudo-tty  subsystem  will  be
     available to another user to open the slave device.

     If O_NONBLOCK or O_NDELAY is set, read on  the  master  side
     returns -1 with errno set to EAGAIN if no data is available,
     and write returns -1 with errno set to EAGAIN  if  there  is
     internal flow control.


     The master driver supports the ISPTM and UNLKPT ioctls  that
     are  used  by  the  functions  grantpt(3C), unlockpt(3C) and
     ptsname(3C). The ioctl ISPTM  determines  whether  the  file
     descriptor  is that of an open master device. On success, it
     returns the 0. The ioctl UNLKPT unlocks the master and slave
     devices.  It  returns 0 on success. On failure, the errno is
     set to EINVAL indicating that the master device is not open.


           master clone device

           slave devices (M = 0 -> N-1)


     grantpt(3C), ptsname(3C), unlockpt(3C), pckt(7M), pts(7D)

     STREAMS Programming Guide

Man(1) output converted with man2html