연결된 두 pty에서 읽으면 무한 루프가 발생하는 이유는 무엇입니까?

연결된 두 pty에서 읽으면 무한 루프가 발생하는 이유는 무엇입니까?

프로그램을 테스트하기 위해 GSM 모뎀을 가짜로 만들고 싶습니다. 프로그램에서 나에게 AT 코드를 보내면 내가 이에 응답할 수 있기를 원합니다.가상 직렬 포트. 그러나 어떤 이유로 프로그램에서 기록된 데이터는 프로그램에 직접 다시 기록됩니다.

나는 socat이 두 개의 파이프를 만들었다고 생각했을 것입니다. 하나는 테스트 프로그램의 출력을 다른 쪽에서 연결하고 있는 모든 항목으로 보내는 것이고, 두 번째 파이프는 다른 방향으로 작동합니다. 그러나 내가 의미하는 바를 알고 있다면 데이터는 "파이프에서 순환"하는 것 같습니다. 이건 에서 찍은 사진이에요TTY 공개내 요점을 설명하자면:

커널에서 Pty 처리

단순화된 복사 스크립트:

다음 명령을 사용하여 pty를 만듭니다.

(xterm 1)$ socat -d -d -d PTY,link=foo PTY,link=bar
2012/01/18 14:45:01 starting loop with FDs [3,3] and [5,5]

나는 양쪽의 의견을 모두 듣습니다.

(xterm 2)$ cat <bar
(xterm 3)$ cat <foo

몇자 적어보면..

(xterm 4)$ echo "..." > foo

..socat은 다음을 기록합니다.많은무제한 왕복 교통편.

(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

두 cat 명령 모두 아무것도 출력하지 않습니다.

편집하다:@wnoise는 socat이 두 개의 PTY 마스터를 생성한다고 설명했습니다. 다음은 이를 설명하는 그림입니다.

socat을 통해 연결된 두 개의 PTY 마스터 장치

ベストアンサー1

사용한 구문은 두 개의 pty 마스터를 생성하고 이를 양방향으로 연결합니다. echo=0옵션에 ""를 추가 하지 않았기 때문에 계속 에코가 발생합니다. raw사용 사례에 따라 추가 해야 할 수도 있습니다 .

おすすめ記事