Manual Page Result
0
Command: openpty | Section: 3 | Source: OpenBSD | File: openpty.3
OPENPTY(3) FreeBSD Library Functions Manual OPENPTY(3)
NAME
getptmfd, openpty, fdopenpty, login_tty, forkpty, fdforkpty - tty utility
functions
SYNOPSIS
#include <termios.h>
#include <util.h>
int
getptmfd(void);
int
openpty(int *amaster, int *aslave, char *name,
const struct termios *termp, const struct winsize *winp);
int
fdopenpty(int ptmfd, int *amaster, int *aslave, char *name,
const struct termios *termp, const struct winsize *winp);
int
login_tty(int fd);
pid_t
forkpty(int *amaster, char *name, const struct termios *termp,
const struct winsize *winp);
pid_t
fdforkpty(int ptmfd, int *amaster, char *name,
const struct termios *termp, const struct winsize *winp);
DESCRIPTION
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 (a string of at
least 16 characters). 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 openpty() function allocates the pseudo-tty through the /dev/ptm
device (see pty(4) for details) which means that its ownership is changed
to the UID of the caller, permissions are set to correct values, and all
earlier uses of that device are revoked (see revoke(2) for details).
The fdopenpty() and fdforkpty() functions work like openpty() and
forkpty() but expect a /dev/ptm file descriptor ptmfd obtained from the
getptmfd() function.
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, output, 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
filename of the slave 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 slave side of the pseudo-tty.
RETURN VALUES
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.
FILES
/dev/pty[p-zP-T][0-9a-zA-Z] master pseudo terminals
/dev/tty[p-zP-T][0-9a-zA-Z] slave pseudo terminals
/dev/ptm pseudo terminal management device
ERRORS
getptmfd() may fail and set errno for any of the errors specified for the
routine open(2).
openpty() and fdopenpty() will fail if:
[ENOENT] There are no available ttys.
fdopenpty() and fdforkpty() will fail if getptmfd() fails. forkpty() and
fdforkpty() will fail if either openpty() or fork() fails.
login_tty() will fail if ioctl() fails to set fd to the controlling
terminal of the current process.
SEE ALSO
fork(2), revoke(2), pty(4)
FreeBSD 14.1-RELEASE-p8 April 20, 2022 FreeBSD 14.1-RELEASE-p8