OPENPTY(3)                 Linux Programmer's Manual                OPENPTY(3)

       openpty, login_tty, forkpty - tty utility functions

       #include <pty.h>  /* for openpty and forkpty */
       #include <utmp.h> /* for login_tty */

       int  openpty(int  *amaster,  int  *aslave,  char  *name, struct termios
       *termp, struct winsize * winp);

       int login_tty(int fd);

       pid_t forkpty(int *amaster, char *name, struct termios  *termp,  struct
       winsize *winp);

       The  openpty()  function finds an available pseudo-tty and returns file
       descriptors for the master and slave in amaster and aslave.  If name is
       not  NULL,  the filename of the slave is returned in name.  If termp is
       not NULL, the terminal parameters of the slave will be set to the  val-
       ues  in  termp.  If winp is not NULL, the window size of the slave will
       be set to the values in winp.

       The login_tty() function prepares for a login on the tty fd (which  may
       be  a  real  tty  device,  or  the slave of a pseudo-tty as returned by
       openpty()) by creating a new session, making fd the controlling  termi-
       nal  for the current process, setting fd to be the standard input, out-
       put, and error streams of the current process, and closing fd.

       The forkpty() function combines openpty(), fork(), and  login_tty()  to
       create a new process operating in a pseudo-tty.  The file descriptor of
       the master side of the pseudo-tty is returned in amaster, and the file-
       name of the slave in name if it is not NULL.  The termp and winp param-
       eters, if not NULL, will determine the terminal attributes  and  window
       size of the slave side of the pseudo-tty.

       If a call to openpty(), login_tty(), or forkpty() is not successful, -1
       is returned and  errno  is  set  to  indicate  the  error.   Otherwise,
       openpty(),  login_tty(),  and  the child process of forkpty() return 0,
       and the parent process of forkpty() returns the process ID of the child

       openpty() will fail if:

       ENOENT There are no available ttys.

       login_pty()  will  fail  if  ioctl() fails to set fd to the controlling
       terminal of the current process.

       forkpty() will fail if either openpty() or fork() fails.


       These are BSD functions, present in libc5 and glibc2.


BSD MANPAGE                       2001-12-13                        OPENPTY(3)