openpty, login_tty, forkpty — tty utility functions
#include <pty.h>
int openpty( |
int *amaster, |
int *aslave, | |
char *name, | |
const struct termios *termp, | |
const struct winsize *winp) ; |
pid_t forkpty( |
int *amaster, |
char *name, | |
const struct termios *termp, | |
const struct winsize *winp) ; |
#include <utmp.h>
int login_tty( |
int fd) ; |
Note | |
---|---|
Link with |
The openpty
() function finds
an available pseudo-terminal and returns file descriptors for
the master and slave in amaster
and aslave
. If name
is not NULL, the filename
of the slave is returned in name
. If termp
is not NULL, the terminal
parameters of the slave will be set to the values in
termp
. If winp
is not 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-terminal as returned by
openpty
()) by creating a new
session, making fd
the controlling terminal for the calling 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(2), and login_tty
() to create a new process
operating in a pseudo-terminal. The file descriptor of the
master side of the pseudo-terminal is returned in amaster
, and the filename of
the slave in name
if
it is not NULL. The termp
and winp
arguments, if not NULL,
will determine the terminal attributes and window size of the
slave side of the pseudo-terminal.
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 ttys.
login_tty
() will fail if
ioctl(2) fails to set
fd
to the controlling
terminal of the calling process.
forkpty
() will fail if
either openpty
() or fork(2) fails.
These are BSD functions, present in libc5 and glibc2. They are not standardized in POSIX.
The const
modifiers were
added to the structure pointer arguments of openpty
() and forkpty
() in glibc 2.8.
In versions of glibc before 2.0.92, openpty
() returns file descriptors for a
BSD pseudo-terminal pair; since glibc 2.0.92, it first
attempts to open a Unix 98 pseudo-terminal pair, and falls
back to opening a BSD pseudo-terminal pair if that fails.
Nobody knows how much space should be reserved for
name
. So, calling
openpty
() or forkpty
() with non-NULL name
may not be secure.
This page is part of release 3.25 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
Copyright (c) OpenBSD Group All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Converted into a manpage again by Martin Schulze <joeyinfodrom.org> Added -lutil remark, 030718 |