DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

termios(S)


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

Syntax

cc . . . -lc

#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(const struct termios *termios_p);

int cfsetospeed(struct termios *termios_p, speed_t speed);

speed_t cfgetispeed(const struct termios *termios_p);

int cfsetispeed(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 termios(M) (see also termio(M) which also describes an ioctl(S) interface that provides some of the same functionality). However, the function interface described here is the preferred user interface.

Many of the functions described here have a termios_p argument that is a pointer to a termios structure (see termios(M)).

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 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:

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

Note that an error is not returned if the baud rates specified in the c_ispeed and c_ospeed fields of the termios structure are not supported by the hardware. Instead, the baud rates remain unchanged and the other termios settings are used.

Line control

If the terminal is using asynchronous serial data transmission, the tcsendbreak function causes transmission of a continuous 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 similar to tcdrain.

If the terminal is not using asynchronous serial data transmission, the tcsendbreak function sends data to generate 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:

The tcflow function suspends transmission or reception of data on the object referred to by fildes, depending on the value of action:

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 effective 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

 +-----+-------------+--------+-------------+
 |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 stored 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 asserted. Normally, this disconnects the line.

cfgetispeed returns the input baud rate stored 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.

Note that these settings take effect only on a successful call to tcsetattr.

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. In order to check whether a call to tcsetattr has successfully set a specified baud rate, call tcgetattr and use cfgetispeed and cfgetospeed to check the current settings.

Get and set terminal foreground process group ID

tcsetpgrp sets the foreground process group ID of the terminal specified by fildes to pgid. The file associated with fildes must be the controlling terminal of the calling process and the controlling terminal must be currently associated 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; however, the information may be subsequently changed by a process that is a member of a foreground process group.

If there is no foreground process group, tcgetpgrp returns a value greater than 1 that does not match the process group ID of any existing process group.

Get terminal session ID

tcgetsid returns the session ID of the terminal specified by fildes.

Return values

On success, tcgetpgrp returns the process group ID of the foreground process group associated with the specified terminal. On failure, tcgetpgrp returns -1 and sets errno to identify the error.

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

On success, cfgetispeed returns the input baud rate from the termios structure.

On success, cfgetospeed returns the output baud rate from the termios structure.

On success, all other functions return 0. On failure, they return -1 and set errno to identify the error.

Diagnostics

In the following conditions, all of the functions fail and set errno to:

[EBADF]
The fildes argument is not a valid file descriptor.

[ENOTTY]
The file associated with fildes is not a terminal.
tcsetattr also fails if the following is true:

[EINVAL]
The optional_actions argument is not a proper value, or no changes could be made.
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.

[EINVAL]
The device does not support the tcdrain function.
tcflush also fails if the following is true:

[EINVAL]
The device does not support the tcflush function 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 function 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 controlling terminal, or fildes does not refer to the controlling terminal.

[EINTR]
A signal interrupted the tcgetpgrp function.
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 controlling 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

setpgid(S), setsid(S), termio(M), termios(M)
© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003