A sintaxe usada cria dois mestres pty e os conecta bidirecionalmente. Você está recebendo ecos constantes porque não adicionou " echo=0
" às opções. Provavelmente também é necessário adicionar raw
ao seu caso de uso.
Eu quero falsificar um modem gsm para testar um programa. Eu quero que o programa envie códigos AT para mim e que eu possa responder de volta, como uma VirtualSerialPort . Mas, por alguma razão, os dados escritos do programa são gravados diretamente para ele.
Eu esperaria que o socat criasse dois canais; um que envia a saída do programa de teste para qualquer coisa que eu tenha anexado no outro lado e outro tubo que funciona na outra direção. Mas os dados parecem "loop em um tubo", se você entender o que quero dizer. Aqui está uma foto do TTY desmistificada para ilustrar meu ponto:
Umscriptdereproduçãosimplificado:
Eucrioosarquivoscom:
(xterm1)$socat-d-d-dPTY,link=fooPTY,link=bar2012/01/1814:45:01startingloopwithFDs[3,3]and[5,5]
Eeuescutoosdoislados:
(xterm2)$cat<bar(xterm3)$cat<foo
Seeuescreveralgunscaracteres...
(xterm4)$echo"..." > foo
.. socat registra um lote de tráfego que vai e volta infinitamente.
(xterm 1)
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 3 to 5
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 3 to 5
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
Não há nada produzido em nenhum dos comandos do cat.
EDIT: @wnoise explicou que o socat cria dois mestres de PTY. Aqui está uma imagem para ilustrar isso:
Tags tty file-descriptors terminal