Provided by: manpages-es_1.55-10_all bug

NOMBRE

       termios,   tcgetattr,   tcsetattr,   tcsendbreak,   tcdrain,  tcflush,  tcflow,  cfmakeraw,  cfgetospeed,
       cfgetispeed, cfsetispeed, cfsetospeed - obtiene y pone atributos de la terminal, controla la línea de  la
       terminal, obtiene y pone la velocidad de la línea

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

       speed_t cfgetospeed(struct termios *termios_p);

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

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

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 se describen aquí poseen un argumento termios_p  que  es  un  puntero  a  una
       estructura termios.  Esta estructura contiene, al menos, los siguientes miembros:

              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 de opciones de c_iflag:

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

       BRKINT Si  IGNBRK  está  activa, los BREAK se ignoran. Si no está activa pero BRKINT si lo está, entonces
              cada BREAK hace que se vacíen las colas de entrada y de salida y, si la terminal  es  la  terminal
              controladora  del  grupo  de  procesos  en  primer plano, hará que se envíe SIGINT a este grupo de
              procesos en primer plano. Cuando ni IGNBRK ni BRKINT están activos, cada BREAK se interpreta  como
              un  carácter NUL, excepto cuando está activo PARMRK, en cuyo caso se interpretan como la secuencia
              \377 \0 \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, interpretar 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  (No en POSIX) Convertir letras mayúsculas a las minúsculas correspondientes en la entrada.

       IXON   Activar el control de flujo XON/XOFF en la salida.

       IXANY  (No en POSIX.1; XSI) Permitir que cualquier carácter reinicie la salida.

       IXOFF  Activar el control de flujo XON/XOFF en la entrada.

       IMAXBEL
              (No en POSIX) Hacer sonar un pitido cuando la cola de entrada esté llena. Linux no implementa este
              bit y actúa como si siempre estuviera activo.

       Constantes de opciones de c_oflag definidas en POSIX.1:

       OPOST  Activar el procesamiento de salida definido por la implementación.

       Las restantes constantes de opciones c_oflag se definen en POSIX 1003.1-2001, a menos que se  indique  lo
       contrario.

       OLCUC  (No en POSIX) Convertir las letras minúsculas en las correspondientes mayúsculas en la salida.

       ONLCR  (XSI) 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  (No  en  POSIX) El carácter de relleno es el ASCII DEL (0177). 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 y CR3.

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

       BSDLY  Máscara de retardo del retroceso. Los valores son BS0 o BS1. (Nunca se ha implementado.)

       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 de opciones de c_cflag:

       CBAUD  (No en POSIX) Máscara de velocidad de transferencia (4+1 bits).

       CBAUDEX
              (No en POSIX) Máscara extra de velocidad de transferencia (1 bit), incluida en CBAUD.

       (POSIX dice que la velocidad de transferencia se  almacena  en  la  estructura  termios  sin  especificar
       precisamente dónde y proporciona cfgetispeed() y cfsetispeed() para acceder a ella. Algunos sistemas usan
       los bits seleccionados por CBAUD en c_cflag,  otros  usan  campos  separados,  por  ejemplo  sg_ispeed  y
       sg_ospeed.)

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

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

       CREAD  Habilita el 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  del  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 (No en POSIX) Máscara para las velocidades de entrada. Los valores para los bits  CIBAUD  son  los
              mismos que los valores para los bits CBAUD, desplazados IBSHIFT bits a la izquierda.

       CRTSCTS
              (No en POSIX) Habilita el contro de flujo (hardware) RTS/CTS.

       Constantes de opciones de 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,
              LNEXT, REPRINT, STATUS y WERASE y buffers para cada línea.

       XCASE  (No  en  POSIX; sin soporte en Linux) 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 por \.  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 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
              (No en POSIX) 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
              (No en POSIX) Si ICANON y IECHO están también activos, los caracteres se muestran  mientras  están
              siendo borrados.

       ECHOKE (No  en  POSIX) Si ICANON también está activo, KILL se muestra borrando cada carácter de la línea,
              como se especifica en ECHOE y ECHOPRT.

       DEFECHO
              (No en POSIX) Hacer eco de caracteres sólo cuando esté leyendo un proceso.

       FLUSHO (No en POSIX; sin soporte en Linux) 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, SIGQUIT y SIGSUSP.

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

       PENDIN (No  en  POSIX;  sin  soporte  en  Linux) Todos los caracteres de la cola de entrada se reimprimen
              cuando se lee el siguiente carácter (bash maneja el teclear por adelantado así.)

       IEXTEN Habilita el procesamiento de entrada definido por la implementación.  Se debe activar esta opción,
              además  de ICANON, para que se interpreten los caracteres especiales EOL2, LNEXT, REPRINT y WERASE
              y para que tenga efecto la opción IUCLC.

       El vector c_cc define los caracteres de control especiales. Los índices simbólicos (valores iniciales)  y
       su significado son:

       VINTR  (003,  ETX,  Ctrl-C o también 0177, DEL, rubout) Carácter de interrupción. Envía una señal SIGINT.
              Se reconoce cuando ISIG está activa en cuyo caso no se pasa como dato de entrada.

       VQUIT  (034, FS, Ctrl-\) Carácter de salida/parada. Envía una señal SIGQUIT. Se reconoce cuando ISIG está
              activa en cuyo caso no se pasa como dato de entrada.

       VERASE (0177,  DEL,  rubout,  o  010,  BS,  Ctrl-H,  o  también #) Carácter de borrado. Borra el carácter
              anterior todavía no borrado, pero no borra más allá de EOF o del principio de línea.  Se  reconoce
              cuando ICANON está activa en cuyo caso no se pasa como dato de entrada.

       VKILL  (025,  NAK,  Ctrl-U,  o  Ctrl-X,  o  también @) Carácter de eliminación. Borra la entrada desde el
              último EOF o principio de línea. Se reconoce cuando ICANON está activa en cuyo  caso  no  se  pasa
              como dato de entrada.

       VEOF   (004, EOT, Ctrl-D) Carácter de fin de fichero. Más exactamente: este carácter hace que lo que haya
              pendiente en el buffer de la terminal se envíe al programa  de  usuario  que  está  esperando  sin
              esperar a un fin de línea. Si es el primer carácter de una línea, la función read() en el programa
              de usuario devuelve 0, que significa ``fin de fichero''. Se reconoce cuando ICANON está activa  en
              cuyo caso no se pasa como dato de entrada.

       VMIN   Número mínimo de caracteres para una lectura no canónica.

       VEOL   (0, NUL) Carácter adicional de fin de línea. Se reconoce cuando ICANON está activa.

       VTIME  Plazo, en décimas de segundo, para una lectura no canónica.

       VEOL2  (No en POSIX; 0, NUL) Otro carácter más de fin de línea. Se reconoce cuando ICANON está activa.

       VSWTCH (No en POSIX; sin soporte en Linux; 0, NUL) Carácter de conmutación/cambio. (Sólo lo usa shl.)

       VSTART (021,  DC1, Ctrl-Q) Carácter de comienzo. Reinica la salida detenida por un carácter de parada. Se
              reconoce cuando IXON está activa en cuyo caso no se pasa como dato de entrada.

       VSTOP  (023, DC3, Ctrl-S) Carácter de parada. Detiene la salida  hasta  que  se  teclee  un  carácter  de
              comienzo. Se reconoce cuando IXON está activa en cuyo caso no se pasa como dato de entrada.

       VSUSP  (032,  SUB,  Ctrl-Z) Carácter de suspensión. Envía una señal SIGTSTP. Se reconoce cuando ISIG está
              activa en cuyo caso no se pasa como dato de entrada.

       VDSUSP (No en POSIX; sin soporte en Linux; 031, EM, Ctrl-Y) Carácter de suspensión  demorada:  envía  una
              señal  SIGTSTP  cuando  el  programa  de usuario lee el carácter. Se reconoce cuando IEXTEN e ISIG
              están activas y el sistema soporta control de trabajos, en cuyo caso  no  se  pasa  como  dato  de
              entrada.

       VLNEXT (No  en  POSIX;  026,  SYN,  Ctrl-V)  Siguiente literal. Obtiene tal cual el siguiente carácter de
              entrada, quitándole cualquier posible significado especial. Se reconoce cuando IEXTEN está  activa
              en cuyo caso no se pasa como dato de entrada.

       VWERASE
              (No  en  POSIX;  027,  ETB,  Ctrl-W)  Borrado de palabras. Se reconoce cuando ICANON e IEXTEN está
              activas, en cuyo caso no se pasa como dato de entrada.

       VREPRINT
              (No en POSIX; 022, DC2, Ctrl-R) Reimprime los caracteres no leídos. Se reconoce  cuando  ICANON  e
              IEXTEN están activas, en cuyo caso no se pasa como dato de entrada.

       VDISCARD
              (No  en  POSIX;  sin  soporte en Linux; 017, SI, Ctrl-O) Conmutar: comenzar/detener el descarte de
              salida pendiente. Se reconoce cuando IEXTEN está activa, en cuyo caso no  se  pasa  como  dato  de
              entrada.

       VSTATUS
              (No en POSIX; sin soporte en Linux; solicitud de estado: 024, DC4, Ctrl-T).

       Estos  valores  de  subíndices  simbólicos  son todos diferentes, excepto VTIME y VMIN que puede tener el
       mismo valor que VEOL y VEOF, respectivamente. (En el modo no canónico, el significado de  los  caracteres
       especiales  se  reemplaza  por  el  significado  de  plazo  de tiempo. MIN representa el número mínimo de
       caracteres que se deben recibir para satisfacer la lectura. TIME es un temporizador dado  en  décimas  de
       segundo. Cuando se han asignado valores a ambos, una lectura esperará hasta que se haya recibido al menos
       un carácter y entonces terminará tan pronto se hayan recibido MIN caracteres o haya pasado un tiempo TIME
       desde  que se recibió el último carácter. Si se asigna un valor sólo a MIN, la lectura no terminará antes
       de que se hayan recibido MIN caracteres. Si se asigna un valor sólo a  TIME,  la  lectura  terminará  tan
       pronto  se  haya  recibido  al menos un carácter o cumpla el tiempo del temporizador. Si no se les asigna
       ningún valor, la lectura  terminará  inmediatamente,  devolviendo  sólo  los  caracteres  ya  disponibles
       actualmente.)

       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  la  terminal pueden ser modificados posteriormente por un proceso en primer
       plano.

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

       TCSANOW
              el cambio ocurre inmediatamente.

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

       TCSAFLUSH
              el  cambio ocurre después de que se haya transmitido toda la salida escrita al objeto referenciado
              por fd, 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
       realizar ninguna acción.

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

       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
              descarta datos recibidos pero no leídos.

       TCOFLUSH
              descarta datos escritos pero no transmitidos.

       TCIOFLUSH
              descarta 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 tasa de transferencia se proporcionan para obtener y asignar los valores de las tasas de
       transferencia  de  entrada  y  de  salida en la estructura termios. Los nuevos valores no entran en vigor
       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 la 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 se activarán más.  Normalmente, esto desconectará la línea.  CBAUDEX es una máscara
       para las velocidades más grandes que 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.

VALOR DEVUELTO

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

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

       Todas las demás funciones devuelven:

       0      en caso de éxito,

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

       Dese cuenta que tcsetattr() termina con éxito si cualquiera de los cambios solicitados  pudo  llevarse  a
       cabo  satisfactoriamente. Por lo tanto, cuando se hacen múltiples cambios puede ser necesario seguir esta
       llamada con una llamada adicional a tcgetattr() para comprobar que todos los cambios se han realizado con
       éxito.

NOTAS

       Unix  V7  y varios sistemas posteriores poseen una lista de tasas de transferencia en las que, después de
       los catorce valores B0, ..., B9600, aparecen dos constantes, EXTA y EXTB ("External A" y  "External  B").
       Muchos sistemas extienden la lista con tasas de transferencia mucho más altas.

VÉASE TAMBIÉN

       stty(1), setserial(8)