Como fazer com que a leitura funcione para não pendurar?
-
25-09-2019 - |
Pergunta
Estou usando o SOCAT para criar uma porta serial virtual com:
socat PTY,link=/dev/ttySV0,echo=1 PTY,link=/dev/ttySV1,echo=1
No meu programa escrito em C ++, abro a porta TTYSV1 e começo a ler.
A função de leitura é um tempo, mas o problema é que a função de leitura está pendurada até que eu envie dados para a porta. Você sabe como fazer com que o Taht funcione para não pendurar e apenas sair se não houver dados no buffer?
EDIT: Enviei dados para a porta usando:
echo [data] > /dev/ttySV0
Solução
Você também pode usar uma função de leitura do sistema, dependendo do sistema operacional que você está em execução. Os detalhes devem estar sob o homem (3) lido.
Você precisaria definir o_nonblock usando o FNCTL. Isso deve fazer com que sua leitura falhe se o tubo / FIFO estiver vazio no momento. Eu verifiquei as páginas do Man para o Linux, mas elas deveriam ser comportamentos semelhantes na maioria dos sistemas baseados em POSIX.
Outras dicas
Uma maneira é usar o método select () para verificar se há dados a serem lidos. este Ou algo mais encontrado no Google (pesquisei "Sockets BSD Select") deve levá -lo ao caminho certo.