1996-12-29 18:30:42 +00:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 1996 Joerg Wunsch
|
|
|
|
.\"
|
|
|
|
.\" 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.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``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 DEVELOPERS 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.
|
|
|
|
.\"
|
1997-02-22 15:12:41 +00:00
|
|
|
.\" $Id$
|
1996-12-29 18:30:42 +00:00
|
|
|
.\" "
|
|
|
|
.Dd December 29, 1996
|
|
|
|
.Os
|
|
|
|
.Dt PTY 3
|
|
|
|
.Sh NAME
|
1996-12-30 21:08:45 +00:00
|
|
|
.Nm openpty ,
|
|
|
|
.Nm forkpty
|
1996-12-29 18:30:42 +00:00
|
|
|
.Nd auxiliary functions to obtain a pseudo-terminal
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.Fd #include <sys/types.h>
|
|
|
|
.Fd #include <sys/ioctl.h>
|
|
|
|
.Fd #include <termios.h>
|
|
|
|
.Fd #include <libutil.h>
|
|
|
|
.Ft int
|
|
|
|
.Fn openpty "int *amaster" "int *aslave" "char *name" "struct termios *termp" "struct winsize *winp"
|
|
|
|
.Ft int
|
|
|
|
.Fn forkpty "int *amaster" "char *name" "struct termios *termp" "struct winsize *winp"
|
|
|
|
.Pp
|
|
|
|
Link with
|
|
|
|
.Va -lutil
|
|
|
|
on the
|
|
|
|
.Xr cc 1
|
|
|
|
command line.
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
The function
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
attempts to obtain the next available pseudo-terminal from the system (see
|
|
|
|
.Xr pty 4 ) .
|
1997-01-01 03:29:33 +00:00
|
|
|
If it successfully finds one, it subsequently tries to change the
|
1996-12-29 18:30:42 +00:00
|
|
|
ownership of the slave device to the real UID of the current process,
|
|
|
|
the group membership to the group
|
|
|
|
.Dq 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 to
|
|
|
|
invalidate any current use of the line by calling
|
|
|
|
.Xr revoke 2 .
|
|
|
|
.Pp
|
|
|
|
If the argument
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa name
|
1996-12-29 18:30:42 +00:00
|
|
|
is not
|
|
|
|
.Dv NULL ,
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
copies the pathname of the slave pty to this area. The caller is
|
1997-01-01 03:29:33 +00:00
|
|
|
responsible for allocating the required space in this array.
|
1996-12-29 18:30:42 +00:00
|
|
|
.Pp
|
|
|
|
If the arguments
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa termp
|
1996-12-29 18:30:42 +00:00
|
|
|
or
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa winp
|
1996-12-29 18:30:42 +00:00
|
|
|
are not
|
|
|
|
.Dv NULL ,
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
initializes the termios and window size settings from the structures
|
1997-01-01 03:29:33 +00:00
|
|
|
these arguments point to, respectively.
|
1996-12-29 18:30:42 +00:00
|
|
|
.Pp
|
1996-12-30 21:08:45 +00:00
|
|
|
Upon return, the open file descriptors for the master and slave side
|
1996-12-29 18:30:42 +00:00
|
|
|
of the pty are returned in the locations pointed to by
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa amaster
|
1996-12-29 18:30:42 +00:00
|
|
|
and
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa aslave ,
|
1996-12-29 18:30:42 +00:00
|
|
|
respectively.
|
|
|
|
.Pp
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn Forkpty
|
1996-12-29 18:30:42 +00:00
|
|
|
first calls
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
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
|
|
|
|
.Xr login_tty 3
|
|
|
|
for the slave pty. In the parent process, it closes the descriptor for the
|
|
|
|
slave side of the pty. The arguments
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa amaster ,
|
|
|
|
.Fa name ,
|
|
|
|
.Fa termp ,
|
1996-12-29 18:30:42 +00:00
|
|
|
and
|
1997-01-09 07:12:09 +00:00
|
|
|
.Fa winp
|
1996-12-29 18:30:42 +00:00
|
|
|
have the same meaning as described for
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty .
|
1996-12-29 18:30:42 +00:00
|
|
|
.Sh RETURN VALUES
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn Openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
returns 0 on success, or -1 on failure.
|
|
|
|
.Pp
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn Forkpty
|
1996-12-29 18:30:42 +00:00
|
|
|
returns -1 on failure, 0 in the slave process, and the process ID of the
|
|
|
|
slave process in the parent process.
|
|
|
|
.Sh ERRORS
|
|
|
|
On failure,
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
will set the global variable
|
|
|
|
.Dv errno
|
|
|
|
to
|
|
|
|
.Er ENOENT .
|
|
|
|
.Pp
|
|
|
|
In addition to this,
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn forkpty
|
1996-12-29 18:30:42 +00:00
|
|
|
may set it to any value as described for
|
|
|
|
.Xr fork 2 .
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr chmod 2 ,
|
|
|
|
.Xr chown 2 ,
|
|
|
|
.Xr fork 2 ,
|
|
|
|
.Xr getuid 2 ,
|
|
|
|
.Xr open 2 ,
|
|
|
|
.Xr revoke 2 ,
|
|
|
|
.Xr login_tty 3 ,
|
|
|
|
.Xr termios 3 ,
|
|
|
|
.Xr pty 4 ,
|
|
|
|
.Xr group 5
|
|
|
|
.Sh BUGS
|
|
|
|
The calling process must have an effective UID of super-user in order
|
|
|
|
to perform all the intended actions. No notification will occur if
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn openpty
|
1996-12-29 18:30:42 +00:00
|
|
|
or
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn forkpty
|
1996-12-29 18:30:42 +00:00
|
|
|
failed to proceed with one of the described steps, as long as they could
|
|
|
|
at least allocate the pty at all (and create the new process in the case
|
|
|
|
of
|
1996-12-30 21:08:45 +00:00
|
|
|
.Fn forkpty ) .
|