openpty, forkpty
— auxiliary functions to obtain
a pseudo-terminal
System Utilities Library (libutil,
-lutil)
#include
<sys/types.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <libutil.h>
int
openpty(int
*amaster, int
*aslave, char
*name, struct termios
*termp, struct winsize
*winp);
int
forkpty(int
*amaster, char
*name, struct termios
*termp, struct winsize
*winp);
The function
openpty()
attempts to obtain the next available pseudo-terminal from the system (see
pty(4)). If it successfully finds one, it subsequently
changes the ownership of the slave device to the real UID of the current
process, the group membership to the group “tty” (if such a
group exists in the system), the access permissions for reading and writing
by the owner, and for writing by the group, and invalidates any current use
of the line by calling
revoke(2).
If the argument name is not
NULL,
openpty()
copies the pathname of the slave pty to this area. The caller is responsible
for allocating the required space in this array.
If the arguments termp or
winp are not NULL,
openpty()
initializes the termios and window size settings from the structures these
arguments point to, respectively.
Upon return, the open file descriptors for the master and slave
side of the pty are returned in the locations pointed to by
amaster and aslave,
respectively.
The
forkpty()
function first calls openpty() to obtain the next
available pseudo-terminal from the system. Upon success, it forks off a new
process. In the child process, it closes the descriptor for the master side
of the pty, and calls
login_tty(3) for the slave pty. In the parent process, it
closes the descriptor for the slave side of the pty. The arguments
amaster, name,
termp, and winp have the same
meaning as described for openpty().
The openpty() function returns 0 on
success, or -1 on failure.
The forkpty() function returns -1 on
failure, 0 in the slave process, and the process ID of the slave process in
the parent process.
The openpty() and
forkpty() functions first appeared in
4.3BSD-Reno.
openpty() writes the slave terminal's name
to name, but does not check that sufficient space is
available. It is advisable to use
ptsname(3) instead.