Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pty(7) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

grantpt(3C)

ldterm(7)

pckt(7)

pseudo(1)

ptem(7)

ptsname(3C)

ttcompat(7)

unlockpt(3C)






       pty(7)                                                        pty(7)


       NAME
             pty - STREAMS pseudo-terminal driver

       DESCRIPTION
             The pseudo-terminal subsystem (pty) supports a pair of
             STREAMS-based devices called the master device and the slave
             device.  The slave device provides processes with an interface
             that is identical to the terminal interface.  However, whereas
             all devices that provide the terminal interface have some kind
             of hardware device behind them, the slave device has another
             process manipulating it through the master half of the pseudo
             terminal.  Anything written on the master device is given to
             the slave as input and anything written on the slave device is
             presented as input on the master side.

             The master device, called ptm, is accessed through the clone
             driver and is the controlling part of the system.  The slave
             device, called pts, works with a line discipline module such
             as ldterm(7), a hardware emulation module such as ptem(7), and
             optionally with an ioctl translation module such as
             ttcompat(7) to provide a terminal interface to the user
             process.  An optional packetizing module called pckt(7) is
             also provided to support ``packet mode'' when it is pushed on
             the master side.

             The master device is opened via the open(2) system call with
             /dev/ptmx as the device to be opened.  The clone open finds
             the next available minor device for that major device; a
             master device is available only if it and its corresponding
             slave device are not already open.

             When the master device is opened, the corresponding slave
             device is automatically locked out, and no user may open that
             device until it is unlocked.  A user may invoke grantpt(3C) to
             change the owner and permissions of the slave device to that
             of the user who is running the process.  Once the permissions
             have been changed, the device may be unlocked by the user.
             Only the owner or a privileged user can access the slave
             device.  The user then invokes unlockpt(3C) to unlock the
             slave device.  The user calls ptsname(3C) to get the name of
             the slave device, and then invokes the open system call with
             the name that was returned by the function.

             After both the master and slave devices have been opened, the
             user has two file descriptors that provide full-duplex
             communication using two streams.  The two streams are


                           Copyright 1994 Novell, Inc.               Page 1













      pty(7)                                                        pty(7)


            automatically connected.  The user may then push modules onto
            either side of the stream.  The user also must push the ptem
            and ldterm modules onto the slave side to get terminal
            semantics.

            The master and slave devices pass all STREAMS messages to
            their adjacent queues.  Only 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 FLUSHW and
            vice versa.

            When the master device is closed, an M_HANGUP message is sent
            to the slave device, which renders the device unusable.  The
            process on the slave side gets the errno ENXIO when attempting
            to write on that stream, but it can read any data remaining on
            the stream head read queue.  When all the data have been read,
            read returns 0, indicating that the stream can no longer be
            used.

            On the last close of the slave device, a zero-length message
            is sent to the master side.  When the master side application
            issues a read and 0 is returned, the user decides whether to
            issue a close, which dismantles the pseudo-terminal, or not
            close the master device so that the pseudo-tty subsystem will
            be available for another user to open the slave device.

         ioctls
            The master device supports the ISPTM and UNLKPT ioctls that
            are used by the grantpt, unlockpt, and ptsname functions.

                  The ioctl ISPTM determines whether the file descriptor
                  is that of an open master device.  On success, it
                  returns the major/minor number (type dev_t) of the
                  master device, which can be used to determine the name
                  of the corresponding slave device.  On failure it
                  returns -1.

                  The ioctl UNLKPT unlocks the master and slave devices.
                  It returns 0 on success.  On failure, it returns -1 and
                  sets errno to EINVAL, indicating that the master device
                  is not open.

            The format of these commands is:
                  int ioctl (int fd, int command, int arg);
            where command is either ISPTM or UNLKPT and arg is 0.



                          Copyright 1994 Novell, Inc.               Page 2













       pty(7)                                                        pty(7)


             The master side application is responsible for detecting an
             interrupt character and sending an interrupt signal SIGINT to
             the process on the slave side.  This can be done as follows:
                   ioctl (fd, TIOCSIGNAL, SIGINT);
             where SIGINT is defined in the header file signal.h.

       FILES
             /dev/ptmx         pseudo-terminal master device

             /dev/pts/*        pseudo-terminal slave devices

       REFERENCES
             grantpt(3C), ldterm(7), pckt(7), pseudo(1), ptem(7),
             ptsname(3C), ttcompat(7), unlockpt(3C)


































                           Copyright 1994 Novell, Inc.               Page 3








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026