xref: /netbsd-src/lib/libc/stdlib/posix_openpt.3 (revision 5f2f42719cd62ff11fd913b40b7ce19f07c4fd25)
1.\" $NetBSD: posix_openpt.3,v 1.7 2022/09/06 22:54:41 gutteridge Exp $
2.\"
3.\" Copyright (c) 2004 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to The NetBSD Foundation
7.\" by Christos Zoulas.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28.\" POSSIBILITY OF SUCH DAMAGE.
29.\"
30.Dd September 6, 2022
31.Dt POSIX_OPENPT 3
32.Os
33.Sh NAME
34.Nm posix_openpt
35.Nd open a pseudo-terminal device
36.Sh LIBRARY
37.Lb libc
38.Sh SYNOPSIS
39.In stdlib.h
40.In fcntl.h
41.Ft int
42.Fn posix_openpt "int oflag"
43.Sh DESCRIPTION
44The
45.Fn posix_openpt
46function searches for an unused master pseudo-terminal device,
47opens it, and returns a file descriptor associated with the now
48used pseudo-terminal device.
49The
50.Fa oflag
51argument has the same meaning as in the
52.Xr open 2
53call.
54However, the value of
55.Fa oflag
56is ignored; it exists for compatibility reasons only.
57.Sh RETURN VALUES
58If successful,
59.Fn posix_openpt
60returns a non-negative integer, which corresponds to a file descriptor
61pointing to the master pseudo-terminal device.
62Otherwise, a value of \-1 is returned and
63.Va errno
64is set to indicate the error.
65.Pp
66Note that unlike implementations on some other operating systems,
67.Fn posix_openpt
68does not return
69.Er EINVAL
70if the value of
71.Fa oflag
72would be deemed invalid, instead it is simply ignored.
73This means it is not possible to dynamically test which
74.Xr open 2
75flags are possible to set, and apply a fallback if
76.Er EINVAL
77is received.
78.Sh SEE ALSO
79.Xr ioctl 2 ,
80.Xr open 2 ,
81.Xr grantpt 3 ,
82.Xr ptsname 3 ,
83.Xr unlockpt 3
84.Sh RATIONALE
85The standards committee did not want to directly expose the cloning device,
86thus decided to wrap the functionality in this function.
87The equivalent code would be:
88.Bd -literal
89	int
90	posix_openpt(int oflag) {
91		return open("/dev/ptmx", oflag);
92	}
93.Ed
94.Sh STANDARDS
95The
96.Fn posix_openpt
97function conforms to
98.St -p1003.1-2001 .
99