Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

setsid(2)

setpgid(2)

termio(7)



termios(2)                SYSTEM CALLS                 termios(2)



NAME
     termios:   tcgetattr,   tcsetattr,   tcsendbreak,   tcdrain,
     tcflush,   tcflow,  cfgetospeed,  cfgetispeed,  cfsetispeed,
     cfsetospeed, tcgetpgrp, tcsetpgrp, tcgetsid - general termi-
     nal interface

SYNOPSIS
     #include <termios.h>
     int tcgetattr(int fildes, struct termios *termios_p);
     int tcsetattr(int fildes, int optional_actions,
          const struct termios *termios_p);
     int tcsendbreak(int fildes, int duration);
     int tcdrain(int fildes);
     int tcflush(int fildes, int queue_selector);
     int tcflow(int fildes, int action);
     speed_t cfgetospeed(struct termios *termios_p);
     int cfsetospeed(const struct termios *termios_p, speed_t speed);
     speed_t cfgetispeed(struct termios *termios_p);
     int cfsetispeed(const struct termios *termios_p, speed_t speed);
     #include <sys/types.h>
     #include <termios.h>
     pid_t tcgetpgrp(int fildes);
     int tcsetpgrp(int fildes, pid_t pgid);
     pid_t tcgetsid(int fildes);

DESCRIPTION
     These functions describe a general  terminal  interface  for
     controlling   asynchronous  communications  ports.   A  more
     detailed overview of the terminal interface can be found  in
     termio(7),  which  also describes an ioctl(2) interface that
     provides the  same  functionality.   However,  the  function
     interface described here is the preferred user interface.

     Many of the functions described here have a termios_p  argu-
     ment  that is a pointer to a termios structure.  This struc-
     ture contains the following members:

          tcflag_t   c_iflag;        /* input modes */
          tcflag_t   c_oflag;        /* output modes */
          tcflag_t   c_cflag;        /* control modes */
          tcflag_t   c_lflag;        /* local modes */
          cc_t       c_cc[NCCS];     /* control chars */

     These structure members are  described  in  detail  in  ter-
     mio(7).

  Get and Set Terminal Attributes
     The tcgetattr function gets the parameters  associated  with
     the object referred by fildes 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



                                                                1





termios(2)                SYSTEM CALLS                 termios(2)



     process.

     The tcsetattr function sets the parameters  associated  with
     the terminal (unless support is required from the underlying
     hardware that is not available) from the  termios  structure
     referenced by termios_p as follows:
          If  optional_actions  is  TCSANOW,  the  change  occurs
          immediately.   If  optional_actions  is  TCSADRAIN, the
          change occurs after all output written  to  fildes  has
          been  transmitted.   This  function should be used when
          changing   parameters   that   affect    output.     If
          optional_actions  is TCSAFLUSH, the change occurs after
          all output written to the object referred by fildes has
          been  transmitted, and all input that has been received
          but not read is discarded before the change is made.

     The symbolic constants for the  values  of  optional_actions
     are defined in <termios.h>.

  Line Control
     If the terminal is using asynchronous serial data  transmis-
     sion, the tcsendbreak function causes transmission of a con-
     tinuous stream of zero-valued bits for a specific  duration.
     If  duration  is zero, it causes transmission of zero-valued
     bits for at least  0.25  seconds,  and  not  more  than  0.5
     seconds.  If duration is not zero, it behaves in a way simi-
     lar to tcdrain.

     If the  terminal  is  not  using  asynchronous  serial  data
     transmission,  the  tcsendbreak  function sends data to gen-
     erate a  break  condition  or  returns  without  taking  any
     action.

     The tcdrain function waits until all output written  to  the
     object referred to by fildes has been transmitted.

     The tcflush function discards data  written  to  the  object
     referred  to by fildes but not transmitted, or data received
     but not read, depending on the value of queue_selector:
          If queue_selector is TCIFLUSH, it flushes data received
          but  not  read.   If  queue_selector  is  TCOFLUSH,  it
          flushes  data  written   but   not   transmitted.    If
          queue_selector  is  TCIOFLUSH,  it  flushes  both  data
          received  but  not  read,  and  data  written  but  not
          transmitted.

     The tcflow function suspends transmission  or  reception  of
     data  on  the object referred to by fildes, depending on the
     value of action:
          If action is TCOOFF, it suspends output.  If action  is
          TCOON, it restarts suspended output.  If action if TCI-
          OFF, the  system  transmits  a  STOP  character,  which



                                                                2





termios(2)                SYSTEM CALLS                 termios(2)



          causes the terminal device to stop transmitting data to
          the system.  If action is TCION, the system transmits a
          START  character,  which  causes the terminal device to
          start transmitting data to the system.

  Get and Set Baud Rate
     The baud rate functions get and set the values of the  input
     and output baud rates in the termios structure.  The effects
     on the terminal device described below do not become  effec-
     tive until the tcsetattr function is successfully called.

     The input and output baud rates are stored  in  the  termios
     structure.   The  values  shown  in the table are supported.
     The names in this table are defined in <termios.h>.
             Name   Description       Name    Description
             ____________________________________________
             B0         Hang up      B600        600 baud
             B50        50 baud      B1200      1200 baud
             B75        75 baud      B1800      1800 baud
             B110      110 baud      B2400      2400 baud
             B134    134.5 baud      B4800      4800 baud
             B150      150 baud      B9600      9600 baud
             B200      200 baud      B19200    19200 baud
             B300      300 baud      B38400    38400 baud

     cfgetospeed gets the output baud rate and stores it  in  the
     termios structure pointed to by termios_p.

     cfsetospeed sets the output baud rate stored in the  termios
     structure  pointed  to by termios_p to speed.  The zero baud
     rate, B0, is used to terminate the  connection.   If  B0  is
     specified,   the  modem  control  lines  are  no  longer  be
     asserted.  Normally, this disconnects the line.

     cfgetispeed gets the input baud rate and stores  it  in  the
     termios structure pointed to by termios_p.

     cfsetispeed sets the input baud rate stored in  the  termios
     structure  pointed  to  by termios_p to speed.  If the input
     baud rate is set to zero, the input baud rate  is  specified
     by  the value of the output baud rate.  Both cfsetispeed and
     cfsetospeed return a value of zero if successful and  -1  to
     indicate  an  error.  Attempts to set unsupported baud rates
     are ignored.  This refers both to changes to baud rates  not
     supported  by the hardware, and to changes setting the input
     and output baud rates to different values  if  the  hardware
     does not support this.

  Get and Set Terminal Foreground Process Group ID
     tcsetpgrp sets the foreground process group ID of the termi-
     nal  specified  by fildes to pgid.  The file associated with
     fildes must be  the  controlling  terminal  of  the  calling



                                                                3





termios(2)                SYSTEM CALLS                 termios(2)



     process and the controlling terminal must be currently asso-
     ciated with the session of the calling  process.  pgid  must
     match a process group ID of a process in the same session as
     the calling process.

     tcgetpgrp returns the foreground process  group  ID  of  the
     terminal  specified  by fildes.  tcgetpgrp is allowed from a
     process that is a member of a background process group; how-
     ever,  the information may be subsequently changed by a pro-
     cess that is a member of a foreground process group.

  Get Terminal Session ID
     tcgetsid returns the session ID of the terminal specified by
     fildes.

DIAGNOSTICS
     On success, tcgetpgrp returns the process group  ID  of  the
     foreground  process group associated with the specified ter-
     minal.  Otherwise, it returns -1 and sets errno to  indicate
     the error.

     On success, tcgetsid returns the session ID associated  with
     the  specified  terminal.  Otherwise, it returns -1 and sets
     errno to indicate the error.

     On success, all other functions return a value of 0.  Other-
     wise, they return -1 and set errno to indicate the error.

     All of the functions fail if one of more of the following is
     true:

     EBADF          The fildes  argument  is  not  a  valid  file
                    descriptor.

     ENOTTY         The file associated with fildes is not a ter-
                    minal.

     tcsetattr also fails if the following is true:

     EINVAL         The optional_actions argument is not a proper
                    value,  or  an  attempt was made to change an
                    attribute represented in the  termios  struc-
                    ture to an unsupported value.

     tcsendbreak also fails if the following is true:

     EINVAL         The device does not support  the  tcsendbreak
                    function.

     tcdrain also fails if one or more of the following is true:

     EINTR          A signal interrupted the tcdrain function.



                                                                4





termios(2)                SYSTEM CALLS                 termios(2)



     EINVAL         The device does not support the tcdrain func-
                    tion.

     tcflush also fails if the following is true:

     EINVAL         The device does not support the tcflush func-
                    tion  or the queue_selector argument is not a
                    proper value.

     tcflow also fails if the following is true:

     EINVAL         The device does not support the tcflow  func-
                    tion  or  the action argument is not a proper
                    value.

     tcgetpgrp also fails if the following is true:

     ENOTTY         the calling process does not have a  control-
                    ling  terminal,  or  fildes does not refer to
                    the controlling terminal.

     tcsetpgrp also fails if the following is true:

     EINVAL         pgid is not a valid process group ID .

     ENOTTY         the calling process does not have a  control-
                    ling  terminal,  or  fildes does not refer to
                    the controlling terminal, or the  controlling
                    terminal  is  no  longer  associated with the
                    session of the calling process.

     EPERM          pgid does not match the process group  of  an
                    existing  process  in the same session as the
                    calling process.

     tcgetsid also fails if the following is true:

     EACCES         fildes is a terminal that is not allocated to
                    a session.

SEE ALSO
     setsid(2), setpgid(2).
     termio(7) in the System Administrator's Reference Manual.












                                                                5



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026