xref: /freebsd/lib/libc/gen/tcsetattr.3 (revision 069ac184)
1.\" Copyright (c) 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd July 15, 2020
29.Dt TCSETATTR 3
30.Os
31.Sh NAME
32.Nm cfgetispeed ,
33.Nm cfsetispeed ,
34.Nm cfgetospeed ,
35.Nm cfsetospeed ,
36.Nm cfsetspeed ,
37.Nm cfmakeraw ,
38.Nm cfmakesane ,
39.Nm tcgetattr ,
40.Nm tcsetattr
41.Nd manipulating the termios structure
42.Sh LIBRARY
43.Lb libc
44.Sh SYNOPSIS
45.In termios.h
46.Ft speed_t
47.Fn cfgetispeed "const struct termios *t"
48.Ft int
49.Fn cfsetispeed "struct termios *t" "speed_t speed"
50.Ft speed_t
51.Fn cfgetospeed "const struct termios *t"
52.Ft int
53.Fn cfsetospeed "struct termios *t" "speed_t speed"
54.Ft int
55.Fn cfsetspeed "struct termios *t" "speed_t speed"
56.Ft void
57.Fn cfmakeraw "struct termios *t"
58.Ft void
59.Fn cfmakesane "struct termios *t"
60.Ft int
61.Fn tcgetattr "int fd" "struct termios *t"
62.Ft int
63.Fn tcsetattr "int fd" "int action" "const struct termios *t"
64.Sh DESCRIPTION
65The
66.Fn cfmakeraw ,
67.Fn cfmakesane ,
68.Fn tcgetattr
69and
70.Fn tcsetattr
71functions are provided for getting and setting the termios structure.
72.Pp
73The
74.Fn cfgetispeed ,
75.Fn cfsetispeed ,
76.Fn cfgetospeed ,
77.Fn cfsetospeed
78and
79.Fn cfsetspeed
80functions are provided for getting and setting the baud rate values in
81the termios structure.
82The effects of the functions on the terminal as described below
83do not become effective, nor are all errors detected, until the
84.Fn tcsetattr
85function is called.
86Certain values for baud rates set in the termios structure and passed to
87.Fn tcsetattr
88have special meanings.
89These are discussed in the portion of the manual page that describes the
90.Fn tcsetattr
91function.
92.Sh GETTING AND SETTING THE BAUD RATE
93The input and output baud rates are found in the termios structure.
94The unsigned integer
95.Li speed_t
96is typedef'd in the include file
97.In termios.h .
98The value of the integer corresponds directly to the baud rate being
99represented, however, the following symbolic values are defined.
100.Bd -literal
101#define B0	0
102#define B50	50
103#define B75	75
104#define B110	110
105#define B134	134
106#define B150	150
107#define B200	200
108#define B300	300
109#define B600	600
110#define B1200	1200
111#define	B1800	1800
112#define B2400	2400
113#define B4800	4800
114#define B9600	9600
115#define B19200	19200
116#define B38400	38400
117#ifndef _POSIX_SOURCE
118#define EXTA	19200
119#define EXTB	38400
120#endif  /*_POSIX_SOURCE */
121.Ed
122.Pp
123The
124.Fn cfgetispeed
125function returns the input baud rate in the termios structure referenced by
126.Fa t .
127.Pp
128The
129.Fn cfsetispeed
130function sets the input baud rate in the termios structure referenced by
131.Fa t
132to
133.Fa speed .
134.Pp
135The
136.Fn cfgetospeed
137function returns the output baud rate in the termios structure referenced by
138.Fa t .
139.Pp
140The
141.Fn cfsetospeed
142function sets the output baud rate in the termios structure referenced by
143.Fa t
144to
145.Fa speed .
146.Pp
147The
148.Fn cfsetspeed
149function sets both the input and output baud rate in the termios structure
150referenced by
151.Fa t
152to
153.Fa speed .
154.Pp
155Upon successful completion, the functions
156.Fn cfsetispeed ,
157.Fn cfsetospeed ,
158and
159.Fn cfsetspeed
160return a value of 0.
161Otherwise, a value of -1 is returned and the global variable
162.Va errno
163is set to indicate the error.
164.Sh GETTING AND SETTING THE TERMIOS STATE
165This section describes the functions that are used to control the general
166terminal interface.
167Unless otherwise noted for a specific command, these functions are restricted
168from use by background processes.
169Attempts to perform these operations shall cause the process group to be sent
170a SIGTTOU signal.
171If the calling process is blocking or ignoring SIGTTOU signals, the process
172is allowed to perform the operation and the SIGTTOU signal is not sent.
173.Pp
174In all the functions, although
175.Fa fd
176is an open file descriptor, the functions affect the underlying terminal
177file, not just the open file description associated with the particular
178file descriptor.
179.Pp
180The
181.Fn cfmakeraw
182function sets the flags stored in the termios structure to a state disabling
183all input and output processing, giving a
184.Dq raw I/O path ,
185while the
186.Fn cfmakesane
187function sets them to a state similar to those of a newly created
188terminal device.
189It should be noted that there is no function to reverse this effect.
190This is because there are a variety of processing options that could be
191re-enabled and the correct method is for an application to snapshot the
192current terminal state using the function
193.Fn tcgetattr ,
194setting raw or sane mode with
195.Fn cfmakeraw
196or
197.Fn cfmakesane
198and the subsequent
199.Fn tcsetattr ,
200and then using another
201.Fn tcsetattr
202with the saved state to revert to the previous terminal state.
203.Pp
204The
205.Fn tcgetattr
206function copies the parameters associated with the terminal referenced
207by
208.Fa fd
209in the termios structure referenced by
210.Fa t .
211This function is allowed from a background process, however, the terminal
212attributes may be subsequently changed by a foreground process.
213.Pp
214The
215.Fn tcsetattr
216function sets the parameters associated with the terminal from the
217termios structure referenced by
218.Fa t .
219The
220.Fa action
221argument is one of
222the following values, as specified in the include file
223.In termios.h .
224.Bl -tag -width "TCSADRAIN"
225.It Fa TCSANOW
226The change occurs immediately.
227.It Fa TCSADRAIN
228The change occurs after all output written to
229.Fa fd
230has been transmitted to the terminal.
231This value of
232.Fa action
233should be used when changing parameters that affect output.
234.It Fa TCSAFLUSH
235The change occurs after all output written to
236.Fa fd
237has been transmitted to the terminal.
238Additionally, any input that has been received but not read is discarded.
239.El
240.Pp
241The
242.Fa action
243may be modified by
244.Em or Ns 'ing
245in
246.Fa TCSASOFT
247which causes the values of the
248.Va c_cflag ,
249.Va c_ispeed ,
250and
251.Va c_ospeed
252fields to be ignored.
253.Pp
254The 0 baud rate is used to terminate the connection.
255If 0 is specified as the output speed to the function
256.Fn tcsetattr ,
257modem control will no longer be asserted on the terminal, disconnecting
258the terminal.
259.Pp
260If zero is specified as the input speed to the function
261.Fn tcsetattr ,
262the input baud rate will be set to the same value as that specified by
263the output baud rate.
264.Pp
265If
266.Fn tcsetattr
267is unable to make any of the requested changes, it returns -1 and
268sets errno.
269Otherwise, it makes all of the requested changes it can.
270If the specified input and output baud rates differ and are a combination
271that is not supported, neither baud rate is changed.
272.Pp
273Upon successful completion, the functions
274.Fn tcgetattr
275and
276.Fn tcsetattr
277return a value of 0.
278Otherwise, they
279return -1 and the global variable
280.Va errno
281is set to indicate the error, as follows:
282.Bl -tag -width Er
283.It Bq Er EBADF
284The
285.Fa fd
286argument to
287.Fn tcgetattr
288or
289.Fn tcsetattr
290was not a valid file descriptor.
291.It Bq Er EINTR
292The
293.Fn tcsetattr
294function was interrupted by a signal.
295.It Bq Er EINVAL
296The
297.Fa action
298argument to the
299.Fn tcsetattr
300function was not valid, or an attempt was made to change an attribute
301represented in the termios structure to an unsupported value.
302.It Bq Er ENOTTY
303The file associated with the
304.Fa fd
305argument to
306.Fn tcgetattr
307or
308.Fn tcsetattr
309is not a terminal.
310.El
311.Sh SEE ALSO
312.Xr tcsendbreak 3 ,
313.Xr termios 4
314.Sh STANDARDS
315The
316.Fn cfgetispeed ,
317.Fn cfsetispeed ,
318.Fn cfgetospeed ,
319.Fn cfsetospeed ,
320.Fn tcgetattr
321and
322.Fn tcsetattr
323functions are expected to be compliant with the
324.St -p1003.1-88
325specification.
326The
327.Fn cfmakeraw ,
328.Fn cfmakesane
329and
330.Fn cfsetspeed
331functions,
332as well as the
333.Li TCSASOFT
334option to the
335.Fn tcsetattr
336function are extensions to the
337.St -p1003.1-88
338specification.
339