xref: /dragonfly/lib/libc/gen/tcsetattr.3 (revision eca362d0)
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.\"	@(#)tcsetattr.3	8.3 (Berkeley) 1/2/94
29.\" $FreeBSD: src/lib/libc/gen/tcsetattr.3,v 1.6.2.4 2002/12/29 16:35:34 schweikh Exp $
30.\"
31.Dd December 10, 2017
32.Dt TCSETATTR 3
33.Os
34.Sh NAME
35.Nm cfgetispeed ,
36.Nm cfsetispeed ,
37.Nm cfgetospeed ,
38.Nm cfsetospeed ,
39.Nm cfsetspeed ,
40.Nm cfmakeraw ,
41.Nm cfmakesane ,
42.Nm tcgetattr ,
43.Nm tcsetattr
44.Nd manipulating the termios structure
45.Sh LIBRARY
46.Lb libc
47.Sh SYNOPSIS
48.In termios.h
49.Ft speed_t
50.Fn cfgetispeed "const struct termios *t"
51.Ft int
52.Fn cfsetispeed "struct termios *t" "speed_t speed"
53.Ft speed_t
54.Fn cfgetospeed "const struct termios *t"
55.Ft int
56.Fn cfsetospeed "struct termios *t" "speed_t speed"
57.Ft int
58.Fn cfsetspeed "struct termios *t" "speed_t speed"
59.Ft void
60.Fn cfmakeraw "struct termios *t"
61.Ft void
62.Fn cfmakesane "struct termios *t"
63.Ft int
64.Fn tcgetattr "int fd" "struct termios *t"
65.Ft int
66.Fn tcsetattr "int fd" "int action" "const struct termios *t"
67.Sh DESCRIPTION
68The
69.Fn cfmakeraw ,
70.Fn cfmakesane ,
71.Fn tcgetattr
72and
73.Fn tcsetattr
74functions are provided for getting and setting the termios structure.
75.Pp
76The
77.Fn cfgetispeed ,
78.Fn cfsetispeed ,
79.Fn cfgetospeed ,
80.Fn cfsetospeed
81and
82.Fn cfsetspeed
83functions are provided for getting and setting the baud rate values in
84the termios structure.
85The effects of the functions on the terminal as described below
86do not become effective, nor are all errors detected, until the
87.Fn tcsetattr
88function is called.
89Certain values for baud rates set in the termios structure and passed to
90.Fn tcsetattr
91have special meanings.
92These are discussed in the portion of the manual page that describes the
93.Fn tcsetattr
94function.
95.Sh GETTING AND SETTING THE BAUD RATE
96The input and output baud rates are found in the termios structure.
97The unsigned integer
98.Li speed_t
99is typedef'd in the include file
100.In termios.h .
101The value of the integer corresponds directly to the baud rate being
102represented, however, the following symbolic values are defined.
103.Bd -literal
104#define B0	0
105#define B50	50
106#define B75	75
107#define B110	110
108#define B134	134
109#define B150	150
110#define B200	200
111#define B300	300
112#define B600	600
113#define B1200	1200
114#define B1800	1800
115#define B2400	2400
116#define B4800	4800
117#define B9600	9600
118#define B19200	19200
119#define B38400	38400
120#if __BSD_VISIBLE
121#define B7200	7200
122#define B14400	14400
123#define B28800	28800
124#define B57600	57600
125#define B76800	76800
126#define B115200	115200
127#define B230400	230400
128#define EXTA	19200
129#define EXTB	38400
130#endif  /* __BSD_VISIBLE */
131.Ed
132.Pp
133The
134.Fn cfgetispeed
135function returns the input baud rate in the termios structure referenced by
136.Fa tp .
137.Pp
138The
139.Fn cfsetispeed
140function sets the input baud rate in the termios structure referenced by
141.Fa tp
142to
143.Fa speed .
144.Pp
145The
146.Fn cfgetospeed
147function returns the output baud rate in the termios structure referenced by
148.Fa tp .
149.Pp
150The
151.Fn cfsetospeed
152function sets the output baud rate in the termios structure referenced by
153.Fa tp
154to
155.Fa speed .
156.Pp
157The
158.Fn cfsetspeed
159function sets both the input and output baud rate in the termios structure
160referenced by
161.Fa tp
162to
163.Fa speed .
164.Pp
165Upon successful completion, the functions
166.Fn cfsetispeed ,
167.Fn cfsetospeed ,
168and
169.Fn cfsetspeed
170return a value of 0.
171Otherwise, a value of -1 is returned and the global variable
172.Va errno
173is set to indicate the error.
174.Sh GETTING AND SETTING THE TERMIOS STATE
175This section describes the functions that are used to control the general
176terminal interface.
177Unless otherwise noted for a specific command, these functions are restricted
178from use by background processes.
179Attempts to perform these operations shall cause the process group to be sent
180a
181.Dv SIGTTOU
182signal.
183If the calling process is blocking or ignoring
184.Dv SIGTTOU
185signals, the process is allowed to perform the operation and the
186.Dv SIGTTOU
187signal is not sent.
188.Pp
189In all the functions, although
190.Fa fd
191is an open file descriptor, the functions affect the underlying terminal
192file, not just the open file description associated with the particular
193file descriptor.
194.Pp
195The
196.Fn cfmakeraw
197function sets the flags stored in the termios structure to a state disabling
198all input and output processing, giving a
199.Dq raw I/O path ,
200while the
201.Fn cfmakesane
202function sets them to a state similar to those of a newly created
203terminal device.
204It should be noted that there is no function to reverse this effect.
205This is because there are a variety of processing options that could be
206re-enabled and the correct method is for an application to snapshot the
207current terminal state using the function
208.Fn tcgetattr ,
209setting raw or sane mode with
210.Fn cfmakeraw
211or
212.Fn cfmakesane
213and the subsequent
214.Fn tcsetattr ,
215and then using another
216.Fn tcsetattr
217with the saved state to revert to the previous terminal state.
218.Pp
219The
220.Fn tcgetattr
221function copies the parameters associated with the terminal referenced
222by
223.Fa fd
224in the termios structure referenced by
225.Fa tp .
226This function is allowed from a background process, however, the terminal
227attributes may be subsequently changed by a foreground process.
228.Pp
229The
230.Fn tcsetattr
231function sets the parameters associated with the terminal from the
232termios structure referenced by
233.Fa tp .
234The
235.Fa action
236field is created by
237.Em or Ns 'ing
238the following values, as specified in the include file
239.In termios.h .
240.Bl -tag -width ".Dv TCSADRAIN"
241.It Dv TCSANOW
242The change occurs immediately.
243.It Dv TCSADRAIN
244The change occurs after all output written to
245.Fa fd
246has been transmitted to the terminal.
247This value of
248.Fa action
249should be used when changing parameters that affect output.
250.It Dv TCSAFLUSH
251The change occurs after all output written to
252.Fa fd
253has been transmitted to the terminal.
254Additionally, any input that has been received but not read is discarded.
255.It Dv TCSASOFT
256If this value is
257.Em or Ns 'ed
258into the
259.Fa action
260value, the values of the
261.Em c_cflag ,
262.Em c_ispeed ,
263and
264.Em c_ospeed
265fields are ignored.
266.El
267.Pp
268The 0 baud rate is used to terminate the connection.
269If 0 is specified as the output speed to the function
270.Fn tcsetattr ,
271modem control will no longer be asserted on the terminal, disconnecting
272the terminal.
273.Pp
274If zero is specified as the input speed to the function
275.Fn tcsetattr ,
276the input baud rate will be set to the same value as that specified by
277the output baud rate.
278.Pp
279If
280.Fn tcsetattr
281is unable to make any of the requested changes, it returns -1 and
282sets
283.Va errno .
284Otherwise, it makes all of the requested changes it can.
285If the specified input and output baud rates differ and are a combination
286that is not supported, neither baud rate is changed.
287.Pp
288Upon successful completion, the functions
289.Fn tcgetattr
290and
291.Fn tcsetattr
292return a value of 0.
293Otherwise, they
294return -1 and the global variable
295.Va errno
296is set to indicate the error, as follows:
297.Bl -tag -width Er
298.It Bq Er EBADF
299The
300.Fa fd
301argument to
302.Fn tcgetattr
303or
304.Fn tcsetattr
305was not a valid file descriptor.
306.It Bq Er EINTR
307The
308.Fn tcsetattr
309function was interrupted by a signal.
310.It Bq Er EINVAL
311The
312.Fa action
313argument to the
314.Fn tcsetattr
315function was not valid, or an attempt was made to change an attribute
316represented in the termios structure to an unsupported value.
317.It Bq Er ENOTTY
318The file associated with the
319.Fa fd
320argument to
321.Fn tcgetattr
322or
323.Fn tcsetattr
324is not a terminal.
325.El
326.Sh SEE ALSO
327.Xr tcsendbreak 3 ,
328.Xr termios 4
329.Sh STANDARDS
330The
331.Fn cfgetispeed ,
332.Fn cfsetispeed ,
333.Fn cfgetospeed ,
334.Fn cfsetospeed ,
335.Fn tcgetattr
336and
337.Fn tcsetattr
338functions are expected to be compliant with the
339.St -p1003.1-88
340specification.
341The
342.Fn cfmakeraw ,
343.Fn cfmakesane
344and
345.Fn cfsetspeed
346functions,
347as well as the
348.Dv TCSASOFT
349option to the
350.Fn tcsetattr
351function are extensions to the
352.St -p1003.1-88
353specification.
354