Como é para um no-break, eu imagino que você pode pagar os sinais do modem a cada 10 segundos ou mais (a partir do freebsd tty (4) ):
int state;
if(ioctl(fd, TIOCMGET, &state)...)
if(state & TIOCM_DTR)...
No entanto, se você deseja ser notificado imediatamente sobre alterações em exatamente um
sinal de modem, ou seja, DCD, você pode definir os sinalizadores tty para limpar CLOCAL
(veja termios ), e depois
open()
na porta irá travar até que o sinal de modem DCD esteja ativo. Quando você
perder DCD você também terá um SIGHUP.
Outro mecanismo é conectar uma das suas linhas ao pino de entrada de dados RX. Se você puxar essa altura por mais do que o tempo de caractere apropriado para a velocidade que você definiu, isso gerará um erro de enquadramento. Se você configurar IGNBRK = 0 e BRKINT = 0, o driver colocará um byte nulo
na fila de entrada que pode desbloquear um %code% pendente, se estiver no modo raw. read()