PTY를 닫은 후 PTY의 슬레이브 측을 재사용할 수 있습니까?

PTY를 닫은 후 PTY의 슬레이브 측을 재사용할 수 있습니까?

슬레이브 측에서 ( open(), read(), write(), close())를 사용한 후 마스터 측에서 read()완료되고 EIO 오류를 반환합니다. 하지만 나는 마스터 fd를 방해하지 않고 여러 번 open()슬레이브 close()를 수행할 수 있을 것으로 기대합니다 .

슬레이브 이후 양쪽 끝이 모두 유효하게 유지될 수 있습니까 close()? 슬레이브가 종료될 때 "메인" 프로그램을 계속 실행하려면 어떻게 해야 합니까? 전체 grantpt(); unlockpt(); ptsname();시퀀스를 다시 실행해야 합니까?

답변1

짧은: 없음

Long: 의사 터미널 슬레이브 연결은 터미널의 한쪽 끝입니다.연결하다, 파이프처럼. 둘 다 커널을 통해 사용자 프로세스 간에 데이터를 주고받는 방법입니다.

한쪽 끝이 닫히면 연결이 끊어집니다. ptsnamePOSIX의 설명은 다음과 같습니다.

실패하면 ptsname()널 포인터가 반환되어야 합니다. fildes가 다음과 같은 경우 이런 일이 발생할 수 있습니다.잘못된 파일 설명자또는 슬레이브 장치 이름이 파일 시스템에 존재하지 않는 경우.

파일 설명자가 닫히면 유효하지 않습니다.

연결을 재사용하려면 열린 슬레이브 파일 설명자를 새로 생성된 프로세스(예: 슬레이브 파일 설명자를 관리하기 위해 작성한 서버 애플리케이션)에 전달하는 등 몇 가지 해결 방법을 사용할 수 있습니다.

추가 자료:

위 글은 2016년에 쓴 글입니다. 언급된 2022년 코멘트TIOCGPPEERioctl, 이는 애플리케이션이 다음을 얻을 수 있도록 하는 기능입니다.새로운파일 설명자:

(Linux 4.13부터) 의사 터미널 마스터 장치를 참조하는 fd의 파일 설명자가 주어지면 (주어진 open(2) 스타일 플래그를 사용하여) 열고 피어 의사 터미널 슬레이브 장치를 참조하는 새 파일 설명자를 반환합니다. 이 작업은 호출 프로세스의 마운트 네임스페이스를 통해 슬레이브 장치의 경로 이름에 액세스할 수 있는지 여부에 관계없이 수행될 수 있습니다.

(닫힌 파일 설명자는 여전히 유효하지 않습니다.)

답변2

다른 답변에 대한 의견을 토대로: 그렇습니다. 실제로 그렇습니다.

pty 쌍을 생성할 때 마스터 프로세스가 슬레이브 쪽을 열고 열어두도록 합니다. 이렇게 하면 얼마나 많은 클라이언트가 슬레이브 장치를 열고 닫더라도 참조 횟수가 0에 도달하지 않으며 무효화되지 않습니다.

관련 정보