특히 우리는 의사 터미널 용어로 말합니다. 파일 설명자 master
와 slave
의사 터미널 쌍이 있다고 가정합니다(제어 터미널이라고 가정). IXON
on master
(또는 같은 것)을 비활성화하면 slave
이 작업을 수행할 때 write(master, &control_s_code, 1)
이 read(slave, &byte, 1)
코드를 얻게 됩니다. 같은 우려 control_q_code
. 문제는 비활성화가 무엇을 하느냐는 것입니다 IXOFF
.
답변1
IXOFF
pseudo-ttys에서는 구현되지 않으며 IXOFF
pseudo-tty에 대한 설정은 효과가 없습니다.
IXOFF
입력 큐가 가득 찼을 때 tty 드라이버가 VSTOP
다른 쪽 끝에 문자를 보내도록 해야 하며(더 많은 데이터를 보내는 것을 방지해야 함) VSTART
문자를 처리하고 공간이 있을 때 다른 쪽 끝에 문자를 보내야 합니다. 더 많은 데이터.
IXON
이는 후자 와 다르며 tty 드라이버가 VSTART
상대방에서 전송된 / 문자를 존중하고 ( ) 문자가 수신될 때까지 모든 전송을 중지합니다.VSTOP
VSTOP
^S
VSTART
^Q
예를 들어 의사 tty의 경우 "다른 쪽 끝"이 기본 pty입니다. 터미널 에뮬레이터에서 설정 대신 yes를 누르면 ^S
슬레이브 tty가 입력한 문자의 반향을 중지하고 여기에 기록된 데이터를 표시합니다(슬레이브 tty가 차단되거나 반환될 때 출력 대기열이 가득 찰 때까지 대기열에 보관됩니다).IXON
IXOFF
write(2)
EAGAIN
커널은 항상 슬레이브의 입력 큐가 가득 차 있는지 여부를 (구조 필드 등을 확인하여) 알고 마스터의 pty에 쓰는 프로세스를 차단할 수 있기 때문에 pseudo-tty에 흐름 제어를 구현할 필요가 없습니다.
소프트웨어 흐름 제어는 실제 직렬 연결을 사용할 때만 유용합니다.아니요RTS/CTS와 같은 대역 외 신호: Unix, TCP 또는 기타 "파이프라인" 추상화와 달리 와이어는 버퍼링되지 않으며 수신자가 모든 상태 변경을 읽을 때까지 채워지거나 차단되지 않습니다.