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 pseudo-ttys.
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 val-
ues 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 parameters, 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
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 configured.
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.
November 28, 2008 BSD