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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top