![원격 컴퓨터의 직렬 포트에 연결하고 데이터를 로깅하기 위한 버퍼링되지 않은 socat 명령](https://linux55.com/image/98151/%EC%9B%90%EA%B2%A9%20%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98%20%EC%A7%81%EB%A0%AC%20%ED%8F%AC%ED%8A%B8%EC%97%90%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B3%A0%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EB%A1%9C%EA%B9%85%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%9C%20%EB%B2%84%ED%8D%BC%EB%A7%81%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20socat%20%EB%AA%85%EB%A0%B9.png)
현재 다음 명령을 사용하고 있습니다. 로컬 시스템의 직렬 ttyUSB0에서 데이터를 읽고 로깅을 위해 두 개의 tee 명령을 통해 SSH에 양방향으로 연결합니다. 원격 측에서 socat은 stdio를 원격 ttyUSB0에 연결합니다.
stty -F /dev/ttyUSB0 raw 3000000
ssh [email protected] stty -F /dev/ttyUSB0 raw 3000000
socat /dev/ttyUSB0,raw,echo=0 SYSTEM:'"tee -a log_l2r | ssh [email protected] socat - /dev/ttyUSB0,raw,echo=0 | tee -a log_r2l"',pty,echo=0
버퍼링이 실시간 통신을 방해하지 않는지 확인하고 싶습니다.두 로봇 컨트롤러 사이. 라인 버퍼링은 괜찮지만 그게 전부입니다.
위 명령에는 많은 연결이 있으며 기본 버퍼링된 파이프/소켓에 대해 잘 모르겠습니다. 제가 찾는 것을 도와주실 수 있나요?또한 번역이나 에코를 제거해야 합니다(
stty ... raw ...
이미 완료되었다고 생각합니다).이 통신 문제를 해결하기 위해 선호되는 다른 방법이 있습니까? 즉, 다른 명령?
Debian GNU/Linux 실행 - 우분투
답변1
stdio 버퍼링이 발생하면 stdbuf
이를 실제 명령 앞에 붙입니다.
stty
명시적인 것이 필요할 수도 있습니다 -echo
.
대안으로 SSH 암호화가 필요하지 않은 경우 다음을 확인하세요.우빕한 컴퓨터의 USB 장치를 다른 컴퓨터에서 볼 수 있게 만드는 모듈입니다.
tee
로깅을 방지하려면 socat -v
stderr에서 두 데이터 스트림의 복사본을 가져오십시오.