Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (HP-UX-11.11)
Apropos / Subsearch:
optional field

 pts(7)								      pts(7)

      pts - STREAMS slave pty (pseudo-terminal) driver

      #include <&lt&lt&lt;sys/stropts.h>&gt&gt&gt;
      #include <&lt&lt&lt;sys/termios.h>&gt&gt&gt;
      #include <&lt&lt&lt;sys/strtio.h>&gt&gt&gt;

      int open("/dev/pts/N", O_RDWR);

      A pseudo-terminal (pty) consists of a tightly-coupled pair of
      character devices, called the master device and slave device.  The pty
      master and slave device drivers work together to simulate a terminal
      connection where the master provides a connection to the pseudo
      terminal server process and the slave provides a terminal device
      special file access for the terminal application processes, as
      depicted below:

			    | pty functions  |
	   Application <--> |----------------| <--> Server
	    Processes	    | Slave | Master |	     Process
			    | (pts) | (ptm)  |

      The slave driver, pts with ptem (STREAMS pty emulation module) and
      ldterm (STREAMS line discipline module) pushed on top (not shown for
      simplicity), provides a terminal interface as described in termio(7).
      Whereas devices that provide the terminal interface described in
      termio(7) have a hardware device behind them; in contrast, the slave
      device has another process manipulating it through the master side of
      the pty.	Data written on the master device is given to the slave
      device as input and data written on the slave device is presented as
      input on the master device.

      In order to use the STREAMS pty subsystem, a node for the master pty
      driver /dev/ptmx and N number of slave pty devices must be installed
      (see ptm(7) for more details on master pty).  When the master device
      is opened, the corresponding slave device is automatically locked out.
      No user can open that slave device until its permissions are changed
      (via the grantpt() function) and the device is unlocked (via the
      unlockpt() function).  The user then call the ptsname() function to
      obtain the name of the slave device and invoke the open() system call
      to open the slave device.	 Although only one open is allowed on a
      master device, multiple opens are allowed on the slave device.  After
      both the master and slave have been opened, the user has two file
      descriptors which represent the end points of a full duplex connection
      composed of two streams that are automatically connected by the master
      and slave devices when they are opened.  The user may then push the
      desired modules (for example, ptem and ldterm, on pts for terminal

 Hewlett-Packard Company	    - 1 -   HP-UX Release 11i: November 2000

 pts(7)								      pts(7)

      semantics and pckt on ptm for Packet Mode feature).

      The master and slave drivers pass all STREAMS messages to their
      adjacent drivers.	 Only the M_FLUSH message needs some special
      processing because the read queue of the master is connected to the
      write queue of the slave and vice versa.	For example, the FLUSHR flag
      is changed to FLUSHW flag and vice versa whenever a M_FLUSH message
      travels across the master-slave link.  When the master device is
      closed, an M_HANGUP message is sent to the corresponding slave device
      which will render that slave device unusable.  The process on the
      slave side gets the errno [ENXIO] when attempting a write() system
      call to the slave device file but it will be able to read any data
      remaining in the slave stream.  Finally, when all the data has been
      read, the read() system call will return 0, indicating that the slave
      can no longer be used.  On the last close of the slave device, a
      zero-length M_DATA message is sent to the corresponding master device.
      When the application on the master side issues a read(2) or getmsg(2)
      system calls, a 0 (zero) is returned.  The user of the master device
      may decide to close the master device file, which dismantles the
      stream on the master side.  If the master device remains opened, the
      corresponding slave device can be opened and used again by another

      The following example shows how a STREAMS pty master and slave devices
      are typically opened.

	   int fd_master, fd_slave;
	   char *slave;

		fd_master = open("/dev/ptmx", O_RDWR);
		slave = ptsname(fd_master);
		fd_slave = open(slave, O_RDWR);
		ioctl(fd_slave, I_PUSH, "ptem");
		ioctl(fd_slave, I_PUSH, "ldterm");

      pts was developed by HP and OSF.

      /dev/ptmx		Streams pty master clone device
      /dev/pts/N	Streams pty slave devices (0 <= N < NSTRPTY), where
			NSTRPTY is a kernel tunable parameter which can be
			changed via SAM (see sam(1M)).

      insf(1M), sam(1M), getmsg(2), ioctl(2), open(2), read(2), write(2),
      grantpt(3C), ptsname(3C), unlockpt(3C), ldterm(7), ptem(7), ptm(7),

 Hewlett-Packard Company	    - 2 -   HP-UX Release 11i: November 2000

 pts(7)								      pts(7)

      streamio(7), termio(7).

 Hewlett-Packard Company	    - 3 -   HP-UX Release 11i: November 2000