TERMIOS(3)

NOMBRE
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp - obtiene y pone atributos de la terminal, controla la línea de la terminal, obtiene y pone la velocidad de la línea, obtiene y pone la ID. de grupo de procesos en primer plano de la terminal

SINOPSIS
#include <termios.h>
#include <unistd.h>

int tcgetattr ( int fd, struct termios *termios_p );

int tcsetattr ( int fd, int optional_actions, struct termios *termios_p );

int tcsendbreak ( int fd, int duration );

int tcdrain ( int fd );

int tcflush ( int fd, int queue_selector );

int tcflow ( int fd, int action );

int cfmakeraw ( struct termios *termios_p );

speed_t cfgetospeed ( struct termios *termios_p );

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

speed_t cfgetispeed ( struct termios *termios_p );

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

pid_t tcgetpgrp ( int fd );

int tcsetpgrp ( int fd, pid_t pgrpid );

DESCRIPCIÓN
Las funciones termios describen una interfaz general para las terminales que sirve para controlar los puertos de comunicaciones asícronas.

Muchas de las funciones que aquí se describen poseen un argumento termios_p que es un puntero a una estructura termios. Esta estructura contiene los miembros siguientes:

    tcflag_t c_iflag;      /* modos de entrada */
    tcflag_t c_oflag;      /* modos de salida */
    tcflag_t c_cflag;      /* modos de control */
    tcflag_t c_lflag;      /* modos locales */
    cc_t c_cc[NCCS];       /* caracts. de control */

Constantes indicadoras c_iflag:

IGNBRK
    no hacer caso de la condición BREAK en la entrada

BRKINT
    si IGNBRK no está activo, generar SIGINT en caso de condición BREAK, si no leer el BREAK como el carácter \0.

IGNPAR
    No hacer caso de errores de marco y paridad.

PARMRK
    si IGNPAR no está activo, prefijar con \377 \0 un carácter con un error de paridad o marco. Si ni IGNPAR ni PARMRK están activos, leer un carácter con un error de paridad o marco como \0.

INPCK
    permitir la comprobación de paridad en la entrada

ISTRIP
    quitar o poner a cero el 8º bit

INLCR
    traducir NL a CR en la entrada

IGNCR
    no hacer caso del retorno de carro en la entrada

ICRNL
    traducir retorno de carro a salto de línea en la entrada (a menos que IGNCR esté activado)

IUCLC
    convertir letras mayúsculas a las minúsculas correspondientes en la entrada

IXON
    activar el control de flujo XON/XOFF en la salida

IXANY
    activar que cualquier carácter reinicie la salida

IXOFF
    activar el control de flujo XON/XOFF en la entrada

IMAXBEL
    hacer sonar el pitido cuando la cola de entrada esté llena

Constantes indicadoras c_oflag:

OPOST
    activar el procesamiento definido por la implementación de la salida

OLCUC
    convertir las letras minúsculas en las correspondientes mayúsculas en la salida

ONLCR
    convertir NL a CR-NL en la salida

OCRNL
    convertir CR a NL en la salida

ONOCR
    no sacar CR en la columna 0

ONLRET
    no sacar CR

OFILL
    enviar caracteres de relleno para un retardo, en vez de usar un retardo de tiempo

OFDEL
    el carácter de relleno es el ASCII DEL. Si no está activado, el carácter de relleno es el ASCII NUL

NLDLY
    máscara de retardo del salto de línea. Los valores son NL0 y NL1.

CRDLY
    máscara de retardo del retorno de carro. Los valores son CR0, CR1, CR2, o CR3.

TABDLY
    máscara de retardo del tabulador horizontal. Los valores son TAB0, TAB1, TAB2, TAB3, o XTABS. Un valor de XTABS expande tabuladores a espacios (con paradas del tabulador cada 8 columnas).

BSDLY
    máscara de retardo del espacio atrás. Los valores son BS0 o BS1.

VTDLY
    máscara de retardo del tabulador vertical. Los valores son VT0 o VT1.

FFDLY
    máscara de retardo del salto de página. Los valores son FF0 o FF1.

Constantes indicadoras c_cflag:

CSIZE
    máscara de tamaño de carácter. Los valores son CS5, CS6, CS7, o CS8.

CSTOPB
    pone dos bits de parada, en vez de uno.

CREAD
    habilita receptor.

PARENB
    activa la generación de paridad en la salida y comprobación de paridad para la entrada.

PARODD
    la paridad para la entrada y la salida es impar.

HUPCL
    las líneas de control de módem inferiores tras el último proceso cierran el dispositivo (cuelgan).

CLOCAL
    no hace caso de las líneas de control del módem

CIBAUD
    máscara para las velocidades de entrada (sin uso).

CRTSCTS
    control de flujo.

Constantes indicadoras c_lflag:

ISIG
    cuando se reciba cualquiera de los caracteres INTR, QUIT, SUSP, o DSUSP, generar la señal correspondiente.

ICANON
    activar el modo canónico. Esto habilita los caracteres especiales EOF, EOL, EOL2, ERASE, KILL, REPRINT, STATUS, y WERASE, y búferes por líneas.

XCASE
    si ICANON también está activo, la terminal es sólo de letras mayúsculas. La entrada se convierte a minúsculas, salvo para caracteres precedidos de \. En la salida, las letras mayúsculas salen precedidas por \ y las minúsculas convertidas en mayúsculas.

ECHO
    muestra caracteres de entrada.

ECHOE
    si ICANON está también activo, el carácter ERASE borra el carácter anterior de la entrada, y el WERASE borra la palabra anterior.

ECHOK
    si ICANON también está activo, el carácter KILL borra la línea en curso.

ECHONL
    si ICANON está también activo, muestra el carácter NL incluso si no está activado ECHO.

ECHOCTL
    si ECHO también está activo, las señales de control ASCII distintas de TAB, NL, START y STOP, se muestran como ^X, donde X es el carácter cuyo código ASCII es 0x40 más el de la señal de control. Por ejemplo, el carácter 0x08 (BS) se muestra como ^H.

ECHOPRT
    si ICANON y IECHO están también activos, los caracteres se muestran mientras están siendo borrados.

ECHOKE
    si ICANON también está activo, KILL se muestra borrando cada carácter de la línea, como se especifica por ECHOE y ECHOPRT.

FLUSHO
    la salida se está volcando al dispositivo de salida. Esta opción se cambia al teclear el carácter DISCARD.

NOFLSH
    inhabilita el volcado de las colas de entrada y salida cuando se estén generando las señales SIGINT y SIGQUIT, y el de la cola de entrada cuando se genere la señal SIGSUSP.

TOSTOP
    envía la señal SIGTTOU al grupo de proceso de un proceso en segundo plano que trata de escribir a su terminal controladora.

PENDIN
    todos los caracteres de la cola de entrada se reimprimen cuando se lee el siguiente carácter (bash maneja el typeahead así.)

IEXTEN
    habilita el procesado de entrada definido por la implementación.

tcgetattr() obtiene los parámetros asociados con el objeto referido por fd y los guarda en la estructura termios referenciada por termios_p. Esta función puede llamarse desde un proceso en segundo plano; sin embargo, los atributos de terminal pueden ser modificados subsecuentemente por un proceso en primer plano.

tcsetattr() establece los parámetros asociados con la terminal (a menos que se requiera soporte del hardware subyacente que no esté disponible) desde la estructura termios referenciada por termios_p. optional_actions especifica cuándo los cambios tienen efecto:

TCSANOW
    el cambio ocurre inmediatamente.

TCSADRAIN
    el cambio ocurre después de que toda la salida escrita a fd haya sido transmitida. Esta función debería emplearse cuando se cambien parámetros que afecten a la salida.

TCSAFLUSH
    el cambio ocurre después de que toda la salida escrita al objeto referenciado por fd haya sido transmitida, y toda la entrada que se haya recibido pero no leído será descartada antes de que se haga el cambio.

tcsendbreak() transmite un flujo continuo de bits a cero durante un tiempo determinado, si la terminal emplea transmisión de datos en serie asíncrona. Si duration es cero, transmite bits ceros durante al menos ¼ de segundo, y no más de ½ segundo. Si duration no es cero, transmite bits cero durante duration*N segundos, donde N es como poco 0,25 s y no más de 0,5 s.

Si la terminal no está utilizando la transmisión asíncrona de datos en serie, tcsendbreak() regresa sin tomar ninguna acción.

tcdrain() espera hasta que toda la salida escrita al objeto referido por fd haya sido transmitida.

tcflush() descarta datos escritos al objeto referido por fd pero no transmitidos, o datos recibidos pero no leídos, dependiendo del valor de queue_selector:

TCIFLUSH
    vuelca datos recibidos pero no leídos.

TCOFLUSH
    vuelca datos escritos pero no transmitidos.

TCIOFLUSH
    vuelca tanto los datos recibidos pero no leídos, como los escritos pero no transmitidos.

tcflow() suspende la transmisión o recepción de datos en el objeto referido por fd, dependiendo del valor de action:

TCOOFF
    suspende la salida.

TCOON
    reanuda la salida suspendida.

TCIOFF
    transmite un carácter STOP, que hace que el dispositivo de terminal deje de transmitir datos al sistema.

TCION
    transmite un carácter START, que hace que el dispositivo de terminal empiece a transmitir datos del sistema.

El comportamiento predeterminado al abrir un fichero de terminal es que ni su entrada ni su salida están suspendidas.

Las funciones de velocidad se proporcionan para obtener y poner los valores de las velocidades de entrada y salida en la estructura termios. Los nuevos valores no hacen efecto hasta que se llame con éxito a tcsetattr(). Poner la velocidad a B0 significa decirle al módem que "cuelgue". La velocidad de bits real correspondiente a B38400 puede alterarse con setserial(8).

Las velocidades de entrada y salida se guardan en la estructura termios.

cfmakeraw establece los atributos de terminal como sigue:
            termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                            |INLCR|IGNCR|ICRNL|IXON);
            termios_p->c_oflag &= ~OPOST;
            termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
            termios_p->c_cflag &= ~(CSIZE|PARENB);
            termios_p->c_cflag |= CS8;

cfgetospeed() devuelve la velocidad de salida guardada en la estructura termios apuntada por termios_p.

cfsetospeed() establece la velocidad de salida, guardada en la estructura termios apuntada por termios_p, a speed, que debe ser una de estas constantes:
	B0
	B50
	B75
	B110
	B134
	B150
	B200
	B300
	B600
	B1200
	B1800
	B2400
	B4800
	B9600
	B19200
	B38400
	B57600
	B115200
	B230400
La velocidad de cero baudios, B0, se emplea para terminar la conexión. Si se especifica B0, las lineas de control del módem no serán reconocidas como activas más. Normalmente, esto desconectará la línea. CBAUDEX es una máscara para las velocidades tras aquéllas definidas en POSIX.1 (57600 y más). Así, B57600 & CBAUDEX es distinto de cero.

cfgetispeed() devuelve la velocidad de entrada guardada en la estructura termios.

cfsetispeed() establece la velocidad de entrada guardada en la estructura termios a speed. Si la velocidad de entrada se pone a cero, la velocidad de entrada será igual a la de salida.

tcgetpgrp() devuelve la ID. de grupo de proceso del grupo de proceso en segundo plano, ó -1 en caso de error.

tcsetpgrp() establece la ID. de grupo de proceso a pgrpid. pgrpid debe ser el ID de un grupo de proceso en la misma sesión.

VALOR DEVUELTO

cfgetispeed() devuelve la velocidad de entrada guardada en la estructura termios.

cfgetospeed() devuelve la velocidad de salida guardada en la estructura termios.

tcgetpgrp() devuelve la ID. de grupo de proceso del grupo de proceso en primer plano, ó -1 en caso de error.

Todas las otras funciones devuelven:

0   en caso de éxito,

-1  en caso de fallo, y ponen un valor en errno para indicar el error.

VÉASE TAMBIÉN
setserial(8)