xref: /dragonfly/lib/libc/gen/tcsetattr.3 (revision f2c43266)
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.\" $DragonFly: src/lib/libc/gen/tcsetattr.3,v 1.5 2007/09/08 20:50:49 swildner Exp $
31.\"
32.Dd January 2, 1994
33.Dt TCSETATTR 3
34.Os
35.Sh NAME
36.Nm cfgetispeed ,
37.Nm cfsetispeed ,
38.Nm cfgetospeed ,
39.Nm cfsetospeed ,
40.Nm cfsetspeed ,
41.Nm cfmakeraw ,
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 int
62.Fn tcgetattr "int fd" "struct termios *t"
63.Ft int
64.Fn tcsetattr "int fd" "int action" "const struct termios *t"
65.Sh DESCRIPTION
66The
67.Fn cfmakeraw ,
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 tp .
127.Pp
128The
129.Fn cfsetispeed
130function sets the input baud rate in the termios structure referenced by
131.Fa tp
132to
133.Fa speed .
134.Pp
135The
136.Fn cfgetospeed
137function returns the output baud rate in the termios structure referenced by
138.Fa tp .
139.Pp
140The
141.Fn cfsetospeed
142function sets the output baud rate in the termios structure referenced by
143.Fa tp
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 tp
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
171.Dv SIGTTOU
172signal.
173If the calling process is blocking or ignoring
174.Dv SIGTTOU
175signals, the process is allowed to perform the operation and the
176.Dv SIGTTOU
177signal is not sent.
178.Pp
179In all the functions, although
180.Fa fd
181is an open file descriptor, the functions affect the underlying terminal
182file, not just the open file description associated with the particular
183file descriptor.
184.Pp
185The
186.Fn cfmakeraw
187function sets the flags stored in the termios structure to a state disabling
188all input and output processing, giving a
189.Dq raw I/O path .
190It should be noted that there is no function to reverse this effect.
191This is because there are a variety of processing options that could be
192re-enabled and the correct method is for an application to snapshot the
193current terminal state using the function
194.Fn tcgetattr ,
195setting raw mode with
196.Fn cfmakeraw
197and the subsequent
198.Fn tcsetattr ,
199and then using another
200.Fn tcsetattr
201with the saved state to revert to the previous terminal state.
202.Pp
203The
204.Fn tcgetattr
205function copies the parameters associated with the terminal referenced
206by
207.Fa fd
208in the termios structure referenced by
209.Fa tp .
210This function is allowed from a background process, however, the terminal
211attributes may be subsequently changed by a foreground process.
212.Pp
213The
214.Fn tcsetattr
215function sets the parameters associated with the terminal from the
216termios structure referenced by
217.Fa tp .
218The
219.Fa action
220field is created by
221.Em or Ns 'ing
222the following values, as specified in the include file
223.In termios.h .
224.Bl -tag -width ".Dv TCSADRAIN"
225.It Dv TCSANOW
226The change occurs immediately.
227.It Dv 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 Dv 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.It Dv TCSASOFT
240If this value is
241.Em or Ns 'ed
242into the
243.Fa action
244value, the values of the
245.Em c_cflag ,
246.Em c_ispeed ,
247and
248.Em c_ospeed
249fields are ignored.
250.El
251.Pp
252The 0 baud rate is used to terminate the connection.
253If 0 is specified as the output speed to the function
254.Fn tcsetattr ,
255modem control will no longer be asserted on the terminal, disconnecting
256the terminal.
257.Pp
258If zero is specified as the input speed to the function
259.Fn tcsetattr ,
260the input baud rate will be set to the same value as that specified by
261the output baud rate.
262.Pp
263If
264.Fn tcsetattr
265is unable to make any of the requested changes, it returns -1 and
266sets
267.Va errno .
268Otherwise, it makes all of the requested changes it can.
269If the specified input and output baud rates differ and are a combination
270that is not supported, neither baud rate is changed.
271.Pp
272Upon successful completion, the functions
273.Fn tcgetattr
274and
275.Fn tcsetattr
276return a value of 0.
277Otherwise, they
278return -1 and the global variable
279.Va errno
280is set to indicate the error, as follows:
281.Bl -tag -width Er
282.It Bq Er EBADF
283The
284.Fa fd
285argument to
286.Fn tcgetattr
287or
288.Fn tcsetattr
289was not a valid file descriptor.
290.It Bq Er EINTR
291The
292.Fn tcsetattr
293function was interrupted by a signal.
294.It Bq Er EINVAL
295The
296.Fa action
297argument to the
298.Fn tcsetattr
299function was not valid, or an attempt was made to change an attribute
300represented in the termios structure to an unsupported value.
301.It Bq Er ENOTTY
302The file associated with the
303.Fa fd
304argument to
305.Fn tcgetattr
306or
307.Fn tcsetattr
308is not a terminal.
309.El
310.Sh SEE ALSO
311.Xr tcsendbreak 3 ,
312.Xr termios 4
313.Sh STANDARDS
314The
315.Fn cfgetispeed ,
316.Fn cfsetispeed ,
317.Fn cfgetospeed ,
318.Fn cfsetospeed ,
319.Fn tcgetattr
320and
321.Fn tcsetattr
322functions are expected to be compliant with the
323.St -p1003.1-88
324specification.
325The
326.Fn cfmakeraw
327and
328.Fn cfsetspeed
329functions,
330as well as the
331.Dv TCSASOFT
332option to the
333.Fn tcsetattr
334function are extensions to the
335.St -p1003.1-88
336specification.
337