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