# openpty

## NAME



           openpty, login_tty, forkpty - terminal utility functions
    


## LIBRARY



           System utilities library (_libutil_ , _-lutil_)
    


## SYNOPSIS



           **#include <pty.h>**
    
           **int openpty(int ***_amaster_**, int ***_aslave_**, char ***_name_**,**
                         **const struct termios ***_termp_**,**
                         **const struct winsize ***_winp_**);**
           **pid_t forkpty(int ***_amaster_**, char ***_name_**,**
                         **const struct termios ***_termp_**,**
                         **const struct winsize ***_winp_**);**
    
           **#include <utmp.h>**
    
           **int login_tty(int** _fd_**);**
    


## DESCRIPTION



           The **openpty**() function finds an available pseudoterminal 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 values 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 terminal
           referred to by the file descriptor _fd_ (which may be a real
           terminal device, or the slave of a pseudoterminal as returned by
           **openpty**()) by creating a new session, making _fd_ the controlling
           terminal for the calling process, setting _fd_ to be the standard
           input, output, and error streams of the current process, and
           closing _fd_.
    
           The **forkpty**() function combines **openpty**(), fork(2), and
           **login_tty**() to create a new process operating in a pseudoterminal.
           A file descriptor referring to master side of the pseudoterminal
           is returned in _amaster_.  If _name_ is not NULL, the buffer it points
           to is used to return the filename of the slave.  The _termp_ and
           _winp_ arguments, if not NULL, will determine the terminal
           attributes and window size of the slave side of the
           pseudoterminal.
    


## RETURN VALUE



           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 process.
    


## ERRORS



           **openpty**() fails if:
    
           **ENOENT** There are no available terminals.
    
           **login_tty**() fails if ioctl(2) fails to set _fd_ to the controlling
           terminal of the calling process.
    
           **forkpty**() fails if either **openpty**() or fork(2) fails.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌───────────────────────┬───────────────┬────────────────────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├───────────────────────┼───────────────┼────────────────────────┤
           │ **forkpty**(), **openpty**()  │ Thread safety │ MT-Safe locale         │
           ├───────────────────────┼───────────────┼────────────────────────┤
           │ **login_tty**()           │ Thread safety │ MT-Unsafe race:ttyname │
           └───────────────────────┴───────────────┴────────────────────────┘
    


## STANDARDS



           BSD.
    


## BUGS



           Nobody knows how much space should be reserved for _name_.  So,
           calling **openpty**() or **forkpty**() with non-NULL _name_ may not be
           secure.
    


* * *