OPENPTY(3) Library Functions Manual OPENPTY(3)

openpty, login_tty, forkptytty utility functions

#include <util.h>

int
openpty(int *aprimary, int *areplica, char *name, struct termios *termp, struct winsize *winp);

int
login_tty(int fd);

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

The (), login_tty(), and forkpty() functions perform manipulations on ttys and pseudo-ttys.

The () function allocates a pseudo-tty and returns file descriptors for the primary and replica in aprimary and areplica. If name is non-null, the filename of the replica is returned in name. If termp is non-null, the terminal parameters of the replica will be set to the values in termp. If winp is non-null, the window size of the replica will be set to the values in winp.

The () function prepares for a login on the tty fd (which may be a real tty device, or the replica 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, output, and error streams of the current process, and closing fd.

The () function combines openpty(), (), and login_tty() to creates a new process operating in a pseudo-tty. The file descriptor of the primary side of the pseudo-tty is returned in aprimary, and the filename of the replica in name if it is non-null. The termp and winp parameters, if non-null, will determine the terminal attributes and window size of the replica 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:

[]
There are no available pseudo-ttys.

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.

/dev/ptmx
cloning pseudo-tty device
/dev/ttys[0-9][0-9][0-9]
replica pseudo-tty devices

fork(2)

April 5, 2008 macOS 15.2