xref: /freebsd/lib/libc/gen/tcgetwinsize.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
1*4e0c81c5SKonstantin Belousov.\"-
2*4e0c81c5SKonstantin Belousov.\" Copyright (c) 2020 Soumendra Ganguly <soumendraganguly@gmail.com>
3*4e0c81c5SKonstantin Belousov.\"
4*4e0c81c5SKonstantin Belousov.\" Redistribution and use in source and binary forms, with or without
5*4e0c81c5SKonstantin Belousov.\" modification, are permitted provided that the following conditions
6*4e0c81c5SKonstantin Belousov.\" are met:
7*4e0c81c5SKonstantin Belousov.\" 1. Redistributions of source code must retain the above copyright
8*4e0c81c5SKonstantin Belousov.\"    notice, this list of conditions and the following disclaimer.
9*4e0c81c5SKonstantin Belousov.\" 2. Redistributions in binary form must reproduce the above copyright
10*4e0c81c5SKonstantin Belousov.\"    notice, this list of conditions and the following disclaimer in the
11*4e0c81c5SKonstantin Belousov.\"    documentation and/or other materials provided with the distribution.
12*4e0c81c5SKonstantin Belousov.\"
13*4e0c81c5SKonstantin Belousov.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
14*4e0c81c5SKonstantin Belousov.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15*4e0c81c5SKonstantin Belousov.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16*4e0c81c5SKonstantin Belousov.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
17*4e0c81c5SKonstantin Belousov.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18*4e0c81c5SKonstantin Belousov.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19*4e0c81c5SKonstantin Belousov.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
20*4e0c81c5SKonstantin Belousov.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21*4e0c81c5SKonstantin Belousov.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
22*4e0c81c5SKonstantin Belousov.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23*4e0c81c5SKonstantin Belousov.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24*4e0c81c5SKonstantin Belousov.\"
25*4e0c81c5SKonstantin Belousov.\" Portions of this text are reprinted and reproduced in electronic form
26*4e0c81c5SKonstantin Belousov.\" from P1003.1-202x, Draft 1.1, Draft Standard for Information Technology --
27*4e0c81c5SKonstantin Belousov.\" Portable Operating System Interface (POSIX), The Open Group Base
28*4e0c81c5SKonstantin Belousov.\" Specifications Issue 8, Copyright (C) 2020 by the Institute of
29*4e0c81c5SKonstantin Belousov.\" Electrical and Electronics Engineers, Inc and The Open Group. In the
30*4e0c81c5SKonstantin Belousov.\" event of any discrepancy between this version and the original IEEE and
31*4e0c81c5SKonstantin Belousov.\" The Open Group Standard, the original IEEE and The Open Group Standard is
32*4e0c81c5SKonstantin Belousov.\" the referee document. The original Standard can be obtained online at
33*4e0c81c5SKonstantin Belousov.\"	http://www.opengroup.org/unix/online.html.
34*4e0c81c5SKonstantin Belousov.\"
35*4e0c81c5SKonstantin Belousov.Dd December 28, 2020
36*4e0c81c5SKonstantin Belousov.Dt TCGETWINSIZE 3
37*4e0c81c5SKonstantin Belousov.Os
38*4e0c81c5SKonstantin Belousov.Sh NAME
39*4e0c81c5SKonstantin Belousov.Nm tcgetwinsize ,
40*4e0c81c5SKonstantin Belousov.Nm tcsetwinsize
41*4e0c81c5SKonstantin Belousov.Nd get, set the size of a terminal window
42*4e0c81c5SKonstantin Belousov.Sh LIBRARY
43*4e0c81c5SKonstantin Belousov.Lb libc
44*4e0c81c5SKonstantin Belousov.Sh SYNOPSIS
45*4e0c81c5SKonstantin Belousov.In termios.h
46*4e0c81c5SKonstantin Belousov.Bd -literal
47*4e0c81c5SKonstantin Belousovstruct winsize {
48*4e0c81c5SKonstantin Belousov	unsigned short	ws_row;		/* number of rows, in characters */
49*4e0c81c5SKonstantin Belousov	unsigned short	ws_col;		/* number of columns, in characters */
50*4e0c81c5SKonstantin Belousov	unsigned short	ws_xpixel;	/* horizontal size, in pixels */
51*4e0c81c5SKonstantin Belousov	unsigned short	ws_ypixel;	/* vertical size, in pixels */
52*4e0c81c5SKonstantin Belousov};
53*4e0c81c5SKonstantin Belousov.Ed
54*4e0c81c5SKonstantin Belousov.Pp
55*4e0c81c5SKonstantin Belousov.Ft int
56*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize "int fd" "struct winsize *w"
57*4e0c81c5SKonstantin Belousov.Ft int
58*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize "int fd" "const struct winsize *w"
59*4e0c81c5SKonstantin Belousov.Sh DESCRIPTION
60*4e0c81c5SKonstantin BelousovThe
61*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize
62*4e0c81c5SKonstantin Belousovfunction gets the terminal window size of the terminal of which
63*4e0c81c5SKonstantin Belousov.Fa fd
64*4e0c81c5SKonstantin Belousovis an open file descriptor and stores it in the
65*4e0c81c5SKonstantin Belousov.Vt winsize
66*4e0c81c5SKonstantin Belousovstructure of which
67*4e0c81c5SKonstantin Belousov.Fa w
68*4e0c81c5SKonstantin Belousovis a pointer.
69*4e0c81c5SKonstantin Belousov.Pp
70*4e0c81c5SKonstantin BelousovThe
71*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
72*4e0c81c5SKonstantin Belousovfunction sets the terminal window size of the terminal of which
73*4e0c81c5SKonstantin Belousov.Fa fd
74*4e0c81c5SKonstantin Belousovis an open file descriptor from the
75*4e0c81c5SKonstantin Belousov.Vt winsize
76*4e0c81c5SKonstantin Belousovstructure referenced by
77*4e0c81c5SKonstantin Belousov.Fa w .
78*4e0c81c5SKonstantin BelousovThe change occurs immediately.
79*4e0c81c5SKonstantin BelousovIf the terminal window size of the terminal
80*4e0c81c5SKonstantin Belousovis changed successfully to have a value that is different from the value that
81*4e0c81c5SKonstantin Belousovit had before the
82*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
83*4e0c81c5SKonstantin Belousovcall, then the
84*4e0c81c5SKonstantin Belousov.Dv SIGWINCH
85*4e0c81c5SKonstantin Belousovsignal is sent to all those members of the foreground process group of the
86*4e0c81c5SKonstantin Belousovterminal that have the terminal as their controlling terminal.
87*4e0c81c5SKonstantin Belousov.Pp
88*4e0c81c5SKonstantin BelousovThe above declaration of
89*4e0c81c5SKonstantin Belousov.Vt "struct winsize"
90*4e0c81c5SKonstantin Belousovmay not be literal.
91*4e0c81c5SKonstantin BelousovIt is provided only to list the accessible members.
92*4e0c81c5SKonstantin BelousovTherefore, before calling
93*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize ,
94*4e0c81c5SKonstantin Belousovthe members of the
95*4e0c81c5SKonstantin Belousov.Vt winsize
96*4e0c81c5SKonstantin Belousovstructure must be initialized by calling
97*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize .
98*4e0c81c5SKonstantin BelousovThe information in a
99*4e0c81c5SKonstantin Belousov.Vt winsize
100*4e0c81c5SKonstantin Belousovstructure is stored by the kernel in order to provide a consistent interface,
101*4e0c81c5SKonstantin Belousovbut it is not used by the kernel.
102*4e0c81c5SKonstantin Belousov.Sh RETURN VALUE
103*4e0c81c5SKonstantin Belousov.Rv -std tcgetwinsize tcsetwinsize
104*4e0c81c5SKonstantin BelousovThe terminal window size remains unchanged if
105*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
106*4e0c81c5SKonstantin Belousovfails.
107*4e0c81c5SKonstantin Belousov.Pp
108*4e0c81c5SKonstantin Belousov.Sh ERRORS
109*4e0c81c5SKonstantin BelousovThe following are the possible failure conditions:
110*4e0c81c5SKonstantin Belousov.Bl -tag -width Er
111*4e0c81c5SKonstantin Belousov.It Bq Er EBADF
112*4e0c81c5SKonstantin BelousovThe
113*4e0c81c5SKonstantin Belousov.Fa fd
114*4e0c81c5SKonstantin Belousovargument to
115*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize
116*4e0c81c5SKonstantin Belousovor to
117*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
118*4e0c81c5SKonstantin Belousovis not a valid file descriptor.
119*4e0c81c5SKonstantin Belousov.It Bq Er ENOTTY
120*4e0c81c5SKonstantin BelousovThe
121*4e0c81c5SKonstantin Belousov.Fa fd
122*4e0c81c5SKonstantin Belousovargument to
123*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize
124*4e0c81c5SKonstantin Belousovor to
125*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
126*4e0c81c5SKonstantin Belousovis not associated with a character special device.
127*4e0c81c5SKonstantin Belousov.It Bq Er EINVAL
128*4e0c81c5SKonstantin BelousovThe
129*4e0c81c5SKonstantin Belousov.Fa w
130*4e0c81c5SKonstantin Belousovargument to
131*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
132*4e0c81c5SKonstantin Belousovis not valid.
133*4e0c81c5SKonstantin Belousov.It Bq Er EFAULT
134*4e0c81c5SKonstantin BelousovThe
135*4e0c81c5SKonstantin Belousov.Fa w
136*4e0c81c5SKonstantin Belousovargument to
137*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize
138*4e0c81c5SKonstantin Belousovor to
139*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
140*4e0c81c5SKonstantin Belousovpoints outside the process's allocated address space.
141*4e0c81c5SKonstantin Belousov.El
142*4e0c81c5SKonstantin Belousov.Sh SEE ALSO
143*4e0c81c5SKonstantin Belousov.Xr stty 1 ,
144*4e0c81c5SKonstantin Belousov.Xr ioctl 2 ,
145*4e0c81c5SKonstantin Belousov.Xr sigaction 2 ,
146*4e0c81c5SKonstantin Belousov.Xr termios 4 ,
147*4e0c81c5SKonstantin Belousov.Xr tty 4
148*4e0c81c5SKonstantin Belousov.Sh STANDARDS
149*4e0c81c5SKonstantin BelousovThe
150*4e0c81c5SKonstantin Belousov.Fn tcgetwinsize
151*4e0c81c5SKonstantin Belousovand
152*4e0c81c5SKonstantin Belousov.Fn tcsetwinsize
153*4e0c81c5SKonstantin Belousovfunctions are expected to conform to
154*4e0c81c5SKonstantin Belousov.St -p1003.1
155*4e0c81c5SKonstantin BelousovBase Specifications, Issue 8.
156*4e0c81c5SKonstantin BelousovThe
157*4e0c81c5SKonstantin Belousov.Fa ws_xpixel
158*4e0c81c5SKonstantin Belousovand
159*4e0c81c5SKonstantin Belousov.Fa ws_ypixel
160*4e0c81c5SKonstantin Belousovmembers of
161*4e0c81c5SKonstantin Belousov.Vt "struct winsize"
162*4e0c81c5SKonstantin Belousovare FreeBSD extensions.
163