TERMIOS(3)

NOME
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp - obtém e seleciona atributos de terminal, controle de linha, obtém e seleciona taxa de bauds, obtém e seleciona o ID de grupos de processos em primeiro plano

SINÓPSE
#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 );

DESCRIÇÃO
As funções termios descrevem uma interface de terminal geral que é fornecida para controlar portas de comunicação assíncronas.

Muitas das funções descritas aqui têm um argumento termios_p que é um ponteiro para uma estrutura termios. Esta estrutura contém os seguintes membros:

    tcflag_t c_iflag;      /* modos de entrada */
    tcflag_t c_oflag;      /* modos de saída */
    tcflag_t c_cflag;      /* modos de controle */
    tcflag_t c_lflag;      /* modos locais */
    cc_t c_cc[NCCS];       /* caracteres de controle */

constantes de sinalização c_iflag:

IGNBRK
    ignora condições de BREAK na entrada

BRKINT
    Se IGNBRK não estiver setado, gera SIGINT na condição de BREAK, senão lê o BREAK como o caractere \0.

IGNPAR
    ignora erros de enquadramento e paridade.

PARMRK
    se IGNPAR não estiver setado, prefixa um caractere com um erro de paridade ou um erro de enquadramento com \377 \0. Se nem IGNPAR nem PARMRK são setados, lê um caractere com um erro de paridade ou enquadramento como \0.

INPCK
    habilita verificação de paridade na entrada

ISTRIP
    corta o oitavo bit

INLCR
    traduz NL para CR na entrada

IGNCR
    ignora retorno de carro na entrada

ICRNL
    traduz retorno de carro para nova linha na entrada (a menos que IGNCR seja setado)

IUCLC
    mapeia caracteres maiúsculos para minúsculos na entrada

IXON
    habilita controle de fluxo XON/XOFF na entrada

IXANY
    habilita qualquer caractere para reiniciar saída

IXOFF
    habilita controle de fluxo XON/XOFF na entrada

IMAXBEL
    aciona sinal sonoro quando a fila está cheia

contantes de sinalização c_oflag:

OPOST
    habilita processamento de saída definida pela implementação

OLCUC
    mapeia caracteres minúsculos para maiúsculos na saída

ONLCR
    mapeia NL para CR-NL na saída

OCRNL
    mapeia CR para NL na saída

ONOCR
    não envia CR na coluna 0

ONLRET
    não envia CR

OFILL
    envia caracteres de preenchimento para um atraso, em vez de usar um atraso por tempo

OFDEL
    caractere de preenchimento é o ASCII DEL. Se não setado, o caractere de preenchimento é o ASCII NUL

NLDLY
    máscara de atraso de nova linha. Valores são NL0 e NL1.

CRDLY
    máscara de atraso de retorno de carro. Valores são CR0, CR1, CR2, ou CR3.

TABDLY
    máscara de atraso de tabulação horizontal. Valores são TAB0, TAB1, TAB2, TAB3, ou XTABS. Um valor de XTABS expande tabulações para espaços (com paradas de tabulação a cada oito colunas).

BSDLY
    máscara de atraso de 'backspace'. Valores são BS0 ou BS1.

VTDLY
    máscara de atraso de tabulação vertical. Valores são VT0 ou VT1.

FFDLY
    máscara de atraso de alimentação de formulário. Valores são FF0 ou FF1.

constantes de sinalização c_cflag:

CSIZE
    máscara de tamanho de caractere. Valores são CS5, CS6, CS7, ou CS8.

CSTOPB
    seta dois bits de parada, em vez de um.

CREAD
    habilita receptor.

PARENB
    habilita geração de paridade na saída e verificação de paridade para a entrada.

PARODD
    paridade para entrada e saída é ímpar.

HUPCL
    linhas de controle de modem mais baixas depois que o último processo fecha o dispositivo (põe no gancho).

CLOCAL
    ignora linhas de controe do modem

CIBAUD
    máscaras para velocidades de entrada (não usados).

CRTSCTS
    controle de fluxo.

constantes de sinalização c_lflag:

ISIG
    quando qualquer um dos caracteres INTR, QUIT, SUSP, ou DSUSP são recebidos, gera o sinal correspondente.

ICANON
    habilita modo canônico. Isto habilita os caracteres especiais EOF, EOL, EOL2, ERASE, KILL, REPRINT, STATUS, e WERASE, e armazena por linha.

XCASE
    se ICANON também é setado, o terminal é somente maiúsculo. A entrada é convertida para minúsculas, exceto para caracteres precedidos por \. Na saída, caracteres maiúsculos são precedidos por \ e caracteres minúsculos são convertidos para maiúsculos.

ECHO
    ecoa caracteres de entrada.

ECHOE
    se ICANON também é setado, o caractere ERASE apaga o caractere de entrada precedente, e WERASE apaga a palavra precedente.

ECHOK
    se ICANON também é setado, o caractere KILL apaga a linha corrente.

ECHONL
    se ICANON também é setado, ecoa o caractere NL mesmo se ECHO não está setado.

ECHOCTL
    se ECHO também é setado, os sinais de controle ASCII diferentes de TAB, NL, START, e STOP são ecoados no formato ^X, onde X é o caractere com código ASCII 0x40 maior que o sinal de controle. Por exemplo, o caractere 0x08 (BS) é ecoado como ^H.

ECHOPRT
    se ICANON e IECHO também são setados, os caracteres são impressos conforme eles estão sendo apagados.

ECHOKE
    se ICANON também é setado, KILL é ecoado pelo apagamento de cada caractere na linha, como especificado por ECHOE e ECHOPRT.

FLUSHO
    saída está sendo esvaziada. Este sinalizador é invertido pela digitação do caractere DISCARD.

NOFLSH
    desabilita o esvaziamento das filas de entrada e saída quando são gerados os sinais SIGINT e SIGQUIT, e o esvaziamento da fila de entrada quando é gerado o sinal SIGSUSP.

TOSTOP
    envia o sinal SIGTTOU para o grupo de processo de um processo em segundo plano que tenta escrever no seu terminal de controle.

PENDIN
    todos os caracteres na fila de entrada são reimpressos quando o próximo caractere é lido. (bash manipula o 'buffer' de teclado desta forma.)

IEXTEN
    habilita o processamento de entrada definido na implementação.

O vetor c_cc define os caracteres especiais de controle. Os índices simbólicos (e significados: valores iniciais0 são: VINTR (caracter de interrupção: 0177, DEL, rubout), VQUIT (caracter de saída: 034, FS, Ctrl-\), VERASE (caracter de correção: 010, BS, Ctrl-H), VKILL (caracter de terminação: 025, NAK, Ctrl-U), VEOF (caracter de fim de arquivo: 004, EOT, Ctrl-D), VMIN, VEOL (caracter adicional de fim de arquivo: 0, NUL), VTIME, VEOL2 (mais um caracter de fim de arquivo: 0, NUL), VSWTCH (caracter de troca: 0, NUL), VSTART (caracter de início: 021, DC1, Ctrl-Q), VSTOP (caracter de parada: 023, DC3, Ctrl-S), VSUSP (caracter de atraso: 032, SUB, Ctrl-Z), VDSUSP (caracter de suspensão de atraso: 031, EM, Ctrl-Y), VLNEXT (próximo literal: 026, SYN, Ctrl-V), VWERASE (apaga palavra: 027, ETB, Ctrl-W), VREPRINT (caracter de reimpresão: 022, DC2, Ctrl-R), VDISCARD (descarta a saída pendente: 017, SI, Ctrl-O).

Estes valores simbólicos são todos diferentes, exceto que VTIME, VMIN podem ter o mesmo valor como VEOL, VEOF, respectivamente. (No modo não canônico os significados do caracteres especiais é substituído pelo significado "timeout". MIN representa o número mínimo de caracteres que deve ser recebido para satisfazer a leitura. TIME é um crônomero de décimos de segundo. Quando ambos estão selecionados, uma leitura aguardará até que o último dos caracteres tenha sido recebido, e então devolve assim que MIN caracteres tenha sido recebidos ou TIME tenha decorrido desde o último caracter ter sido recebido. Se somente MIN é selecionado, a leitura não retornará antes que MIN caracteres tenham sido recebidos. Se somente TIME é selecionado, a leitura retornará assim que o último caractere tenha sido recebido, ou que o cronômetro zere. Se nenhum é selecionado, a leitura retornará imediatamente, fornecendo somente o caracteres atualmente disponível.)

tcgetattr() obtém os parâmetros associados com o objeto referido por fd e armazena-os na estrutura termios referenciada por termios_p. Esta função pode ser invocada por um processo em segundo plano; porém, os atributos do terminal podem ser alterados subsequentemente por um processo em primeiro plano.

tcsetattr() seta os parâmetros associados com o terminal (a menos que o suporte seja requerido por parte do hardware base que não está disponível) a partir da estrutura termios referida por termios_p. optional_actions especifica quando as alterações têm efeito:

TCSANOW
    a mudança ocorre imediatamente.

TCSADRAIN
    a mudança ocorre depois de todas as saídas escritas em fd terem sido transmitidas. Esta função deve ser usada ao alterar parâmetros que afetam a saída.

TCSAFLUSH
    a mudança ocorre depois que todas as saídas escritas no objeto referenciado por fd foram transmitidas, e todas as entradas foram recebidas mas não lidas serão descartadas antes que a mudança seja feita.

tcsendbreak() transmite um fluxo contínuo de bits com valor zero de duração específica, se o terminal estiver usando transmissão assíncrona de dados seriais. Se a duração é zero, ele transmite bits de valor zero por pelo menos 0,25 segundos, e não mais que 0,5 segundos. Se a duração não é zero, ele envia bits de valor zero por duration*N segundos, onde N é pelo menos 0,25, e não mais que 0,5.

Se o terminal não está usando transmissão assíncrona de dados seriais, tcsendbreak() retorna sem realizar nenhuma ação.

tcdrain() espera até que toda a saída escrita para o objeto referido por fd tenha sido transmitida.

tcflush() descarta dados escritos para o objeto referido por fd mas não transmitidos, ou dados recebidos mas não lidos, dependendo do valor de queue_selector:

TCIFLUSH
    esvazia os dados recebidos mas não lidos.

TCOFLUSH
    esvazi os dados escritos mas não transmitidos.

TCIOFLUSH
    esvazia os dados recebidos mas não lidos, e os dados escritos mas não transmitidos.

tcflow() suspende a transmissão ou a recepção de dados no objeto referido por fd, dependendo do valor da ação:

TCOOFF
    suspende saída.

TCOON
    reinicia saída suspensa.

TCIOFF
    transmite um caractere STOP, que pára a transmissão de dados do dispositivo de terminal para o sistema.

TCION
    transmite um caractere START, que inicia a transmissão de dados do dispositivo de terminal para o sistema.

O padrão na abertura de um arquivo de terminal é que nem a entrada e nem a saída são suspensas.

As funções de taxa de bauds são fornecidas para obter e setar os valores das taxas de bauds de entrada e saída na estrutura termios. Os novos valores não têm efeito até que tcsetattr() seja chamado com sucesso. Configurar a velocidade para B0 instrui o modem para "pôr no gancho". A taxa de bits atual correspondente a B38400 pode ser alterada com setserial(8).

As taxas de bauds de entrada e saída são armazenadas na estrutura termios.

cfmakeraw seta os atributos do terminal como segue:
            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() retorna a taxa de bauds de saída armazenadas na estrutura termios apontada por termios_p.

cfsetospeed() seta a taxa de bauds de saída armazenada na estrutura termios apontada por termios_p para speed, que precisa ser uma dessas constantes:
	B0
	B50
	B75
	B110
	B134
	B150
	B200
	B300
	B600
	B1200
	B1800
	B2400
	B4800
	B9600
	B19200
	B38400
	B57600
	B115200
	B230400
A taxa de bauds zero, B0, é usada para terminar a conexão. Se B0 é especificado, as linhas de controle do modem não serão mais confirmados. Normalmente, isto desconectará a linha. CBAUDEX é uma máscara para as velocidades além daquelas definidas em POSIX.1 (57600 e acima). Portanto, B57600 & CBAUDEX é diferente de zero.

cfgetispeed() retorna a taxa de bauds da entrada armazenada na estrutura termios.

cfsetispeed() seta a taxa de bauds de entrada armazenada na estrutura termios para velocidade. Se a taxa de bauds da entrada é setada para zero, a taxa de bauds da entrada será igual à taxa de bauds da saída.

tcgetpgrp() retorna o ID do grupo de processo de um grupo de processo em primeiro plano, ou -1 em caso de erro.

tcsetpgrp() seta o ID de grupo de processo para pgrpid. pgrpid precisa ser o ID de um grupo de processo na mesma sessão.

VALORES RETORNADOS

cfgetispeed() retorna a taxa de bauds de entrada armazenada na estrutura termios.

cfgetospeed() retorna a taxa de bauds de saída armazenada na estrutura termios.

tcgetpgrp() retorna o ID do grupo de processo de um grupo de processo em primeiro plano, ou -1 em caso de erro.

Todas as outras funções retornam:

0   em caso de sucesso.

-1  em caso de falha e seta errno para indicar o erro.

VEJA TAMBÉM
setserial(8).

TRADUZIDO POR LDP-BR em 21/08/2000.

  Tradução:
Rubens de Jesus Nogueira <darkseid99@usa.net>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>