# TCSETS

## NAME



           TCGETS, TCSETS, TCSETSW, TCSETSF, TCGETS2, TCSETS2, TCSETSW2,
           TCSETSF2, TCGETA, TCSETA, TCSETAW, TCSETAF - get and set terminal
           attributes
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <asm/termbits.h>  **/* Definition of **TC*** constants */
           **#include <sys/ioctl.h>**
    
           **int ioctl(int** _fd_**, TCGETS, struct termios ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETS, const struct termios ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETSW, const struct termios ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETSF, const struct termios ***_argp_**);**
    
           **int ioctl(int** _fd_**, TCGETS2, struct termios2 ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETS2, const struct termios2 ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETSW2, const struct termios2 ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETSF2, const struct termios2 ***_argp_**);**
    
           **int ioctl(int** _fd_**, TCGETA, struct termio ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETA, const struct termio ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETAW, const struct termio ***_argp_**);**
           **int ioctl(int** _fd_**, TCSETAF, const struct termio ***_argp_**);**
    
           **#include <asm/termbits.h>**
    
           **struct termios;**
           **struct termios2;**
           **struct termio;**
    


## DESCRIPTION



           **TCGETS** Equivalent to _tcgetattr(fd, argp)_.
    
                  Get the current serial port settings.
    
           **TCSETS** Equivalent to _tcsetattr(fd, TCSANOW, argp)_.
    
                  Set the current serial port settings.
    
           **TCSETSW**
                  Equivalent to _tcsetattr(fd, TCSADRAIN, argp)_.
    
                  Allow the output buffer to drain, and set the current
                  serial port settings.
    
           **TCSETSF**
                  Equivalent to _tcsetattr(fd, TCSAFLUSH, argp)_.
    
                  Allow the output buffer to drain, discard pending input,
                  and set the current serial port settings.
    
           The following four ioctls are just like **TCGETS** , **TCSETS** , **TCSETSW** ,
           **TCSETSF** , except that they take a _struct termios2 *_ instead of a
           _struct termios *_.  If the structure member **c_cflag** contains the
           flag **BOTHER** , then the baud rate is stored in the structure members
           **c_ispeed** and **c_ospeed** as integer values.  These ioctls are not
           supported on all architectures.
    
                  **TCGETS2**
                  **TCSETS2**
                  **TCSETSW2**
                  **TCSETSF2**
    
           The following four ioctls are just like **TCGETS** , **TCSETS** , **TCSETSW** ,
           **TCSETSF** , except that they take a _struct termio *_ instead of a
           _struct termios *_.
    
                  **TCGETA**
                  **TCSETA**
                  **TCSETAW**
                  **TCSETAF**
    


## RETURN VALUE



           On success, 0 is returned.  On error, -1 is returned and _errno_ is
           set to indicate the error.
    


## ERRORS



           **EPERM** Insufficient permission.
    


## CAVEATS



           **struct termios** from _< asm/termbits.h>_ is different and incompatible
           with **struct termios** from _< termios.h>_.  These ioctl calls require
           **struct termios** from _< asm/termbits.h>_.
    


## EXAMPLES



           Get or set arbitrary baudrate on the serial port.
    
           /* SPDX-License-Identifier: GPL-2.0-or-later */
    
           #include <asm/termbits.h>
           #include <fcntl.h>
           #include <stdio.h>
           #include <stdlib.h>
           #include <sys/ioctl.h>
           #include <unistd.h>
    
           int
           main(int argc, char *argv[])
           {
           #if !defined BOTHER
               fprintf(stderr, "BOTHER is unsupported\n");
               /* Program may fallback to TCGETS/TCSETS with Bnnn constants */
               exit(EXIT_FAILURE);
           #else
               /* Declare tio structure, its type depends on supported ioctl */
           # if defined TCGETS2
               struct termios2 tio;
           # else
               struct termios tio;
           # endif
               int fd, rc;
    
               if (argc != 2 && argc != 3 && argc != 4) {
                   fprintf(stderr, "Usage: %s device [output [input] ]\n", argv[0]);
                   exit(EXIT_FAILURE);
               }
    
               fd = open(argv[1], O_RDWR | O_NONBLOCK | O_NOCTTY);
               if (fd < 0) {
                   perror("open");
                   exit(EXIT_FAILURE);
               }
    
               /* Get the current serial port settings via supported ioctl */
           # if defined TCGETS2
               rc = ioctl(fd, TCGETS2, &tio);
           # else
               rc = ioctl(fd, TCGETS, &tio);
           # endif
               if (rc) {
                   perror("TCGETS");
                   close(fd);
                   exit(EXIT_FAILURE);
               }
    
               /* Change baud rate when more arguments were provided */
               if (argc == 3 || argc == 4) {
                   /* Clear the current output baud rate and fill a new value */
                   tio.c_cflag &= ~CBAUD;
                   tio.c_cflag |= BOTHER;
                   tio.c_ospeed = atoi(argv[2]);
    
                   /* Clear the current input baud rate and fill a new value */
                   tio.c_cflag &= ~(CBAUD << IBSHIFT);
                   tio.c_cflag |= BOTHER << IBSHIFT;
                   /* When 4th argument is not provided reuse output baud rate */
                   tio.c_ispeed = (argc == 4) ? atoi(argv[3]) : atoi(argv[2]);
    
                   /* Set new serial port settings via supported ioctl */
           # if defined TCSETS2
                   rc = ioctl(fd, TCSETS2, &tio);
           # else
                   rc = ioctl(fd, TCSETS, &tio);
           # endif
                   if (rc) {
                       perror("TCSETS");
                       close(fd);
                       exit(EXIT_FAILURE);
                   }
    
                   /* And get new values which were really configured */
           # if defined TCGETS2
                   rc = ioctl(fd, TCGETS2, &tio);
           # else
                   rc = ioctl(fd, TCGETS, &tio);
           # endif
                   if (rc) {
                       perror("TCGETS");
                       close(fd);
                       exit(EXIT_FAILURE);
                   }
               }
    
               close(fd);
    
               printf("output baud rate: %u\n", tio.c_ospeed);
               printf("input baud rate: %u\n", tio.c_ispeed);
    
               exit(EXIT_SUCCESS);
           #endif
           }
    


* * *