openpty, login_tty, forkpty — terminal 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 pseudoterminal 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 terminal fd
(which may be a real
terminal device, or the slave of a pseudoterminal 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 pseudoterminal. The file descriptor of the
master side of the pseudoterminal 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 pseudoterminal.
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 terminals.
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.
For an explanation of the terms used in this section, see attributes(7).
Interface | Attribute | Value |
forkpty (), openpty () |
Thread safety | MT-Safe locale |
login_tty () |
Thread safety | MT-Unsafe race:ttyname |
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 pseudoterminal pair; since glibc 2.0.92, it first
attempts to open a UNIX 98 pseudoterminal pair, and falls
back to opening a BSD pseudoterminal 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 4.07 of the Linux man-pages
project. A
description of the project, information about reporting bugs,
and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.
Copyright (c) OpenBSD Group All rights reserved. %%%LICENSE_START(BSD_3_CLAUSE_UCB) 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. %%%LICENSE_END Converted into a manpage again by Martin Schulze <joeyinfodrom.org> Added -lutil remark, 030718 |