OPENPTY(3) BSD Library Functions Manual OPENPTY(3)
openpty, login_tty, forkpty -- tty utility functions
System Utilities Library (libutil, -lutil)
openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp);
forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp);
The openpty(), login_tty(), and forkpty() functions perform manipulations on ttys and
The openpty() function finds an available pseudo-tty and returns file descriptors for the
master and slave in amaster and aslave. If name is non-null, the filename of the slave is
returned in name. If termp is non-null, the terminal parameters of the slave will be set to
the values in termp. If winp is non-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 terminal 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 (to the parent process only) in amaster. The filename of the slave is returned (to
both the parent and child processes) in name if name is non-null. The termp and winp param-
eters, if non-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 process.
openpty() will fail if:
[ENOENT] There are no available ttys.
[EPERM] The caller was not the superuser and the ptm(4) device is missing or not
login_tty() 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.
BSD November 28, 2008 BSD