---
name: "tcsetattr"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/tcsetattr"
---

# tcsetattr(3)

get and set terminal attributes

## NAME

tcgetattr, tcsetattr - get and set terminal attributes

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <termios.h>
```

**int tcgetattr(int** *fd***, struct termios \****termios\_p***);** **int tcsetattr(int** *fd***, int** *optional\_actions***,**               **const struct termios \****termios\_p***);**

## DESCRIPTION

**tcgetattr**() gets the parameters associated with the object referred by *fd*, and stores them in the *termios* structure referenced by *termios\_p*. This function may be invoked from a background process; however, the terminal attributes may be subsequently changed by a foreground process.

**tcsetattr**() sets the parameters associated with the terminal (unless support is required from the underlying hardware that is not available) from the *termios* structure referred to by *termios\_p*. *optional\_actions* specifies when the changes take effect:

- **TCSANOW**

  the change occurs immediately.

- **TCSADRAIN**

  the change occurs after all output written to *fd* has been transmitted. This option should be used when changing parameters that affect output.

- **TCSAFLUSH**

  the change occurs after all output written to the object referred by *fd* has been transmitted, and all input that has been received but not read will be discarded before the change is made.

## RETURN VALUE

- **0**

  on success.

- **-1**

  on failure and set *errno* to indicate the error.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **tcgetattr**(), **tcsetattr**() | Thread safety | MT-Safe |

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001.

## CAVEATS

**tcsetattr**() returns success if *any* of the requested changes could be successfully carried out. Therefore, when making multiple changes, it may be necessary to follow this call with a further call to **tcgetattr**() to check that all changes have been performed successfully.

## SEE ALSO

[**termios**(3type)](/termios/3type.md), [**termios**(7)](/termios/7.md)
