# tcgetattr

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           tcgetattr — get the parameters associated with the terminal
    


## SYNOPSIS



           #include <termios.h>
    
           int tcgetattr(int _fildes_ , struct termios *_termios_p_);
    


## DESCRIPTION



           The _tcgetattr_() function shall get the parameters associated with
           the terminal referred to by _fildes_ and store them in the **termios**
           structure referenced by _termios_p_.  The _fildes_ argument is an open
           file descriptor associated with a terminal.
    
           The _termios_p_ argument is a pointer to a **termios** structure.
    
           The _tcgetattr_() operation is allowed from any process.
    
           If the terminal device supports different input and output baud
           rates, the baud rates stored in the **termios** structure returned by
           _tcgetattr_() shall reflect the actual baud rates, even if they are
           equal. If differing baud rates are not supported, the rate
           returned as the output baud rate shall be the actual baud rate. If
           the terminal device does not support split baud rates, the input
           baud rate stored in the **termios** structure shall be the output rate
           (as one of the symbolic values).
    


## RETURN VALUE



           Upon successful completion, 0 shall be returned. Otherwise, -1
           shall be returned and _errno_ set to indicate the error.
    


## ERRORS



           The _tcgetattr_() function shall fail if:
    
           **EBADF** The _fildes_ argument is not a valid file descriptor.
    
           **ENOTTY** The file associated with _fildes_ is not a terminal.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           None.
    


## RATIONALE



           Care must be taken when changing the terminal attributes.
           Applications should always do a _tcgetattr_(), save the **termios**
           structure values returned, and then do a _tcsetattr_(), changing
           only the necessary fields. The application should use the values
           saved from the _tcgetattr_() to reset the terminal state whenever it
           is done with the terminal.  This is necessary because terminal
           attributes apply to the underlying port and not to each individual
           open instance; that is, all processes that have used the terminal
           see the latest attribute changes.
    
           A program that uses these functions should be written to catch all
           signals and take other appropriate actions to ensure that when the
           program terminates, whether planned or not, the terminal device's
           state is restored to its original state.
    
           Existing practice dealing with error returns when only part of a
           request can be honored is based on calls to the _ioctl_() function.
           In historical BSD and System V implementations, the corresponding
           _ioctl_() returns zero if the requested actions were semantically
           correct, even if some of the requested changes could not be made.
           Many existing applications assume this behavior and would no
           longer work correctly if the return value were changed from zero
           to -1 in this case.
    
           Note that either specification has a problem. When zero is
           returned, it implies everything succeeded even if some of the
           changes were not made. When -1 is returned, it implies everything
           failed even though some of the changes were made.
    
           Applications that need all of the requested changes made to work
           properly should follow _tcsetattr_() with a call to _tcgetattr_() and
           compare the appropriate field values.
    


## FUTURE DIRECTIONS



           None.
    


* * *