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