하위 프로세스 내에서 PTY의 파일 설명자를 얻는 방법은 무엇입니까?

하위 프로세스 내에서 PTY의 파일 설명자를 얻는 방법은 무엇입니까?

https://man7.org/linux/man-pages/man7/pty.7.html

"UNIX 98 의사 터미널"에서는 작동한다고 말하지만 ptsname(그런 다음 open) 이 함수는 파일 설명자를 허용합니다. 거기에 0(STDIN)과 1(STDOUT)을 넣으려고 했지만 "장치에 부적절한 ioctl"이라는 오류 메시지가 표시되어 실패했습니다. 그놈 터미널에서 프로그램을 실행합니다.

나는 다른 xterm프로그램을 작성하고 있지 않습니다. 비동기(비차단) 비표준 하위 수준 입력 및 출력을 위한 파일 설명자를 갖고 싶을 뿐입니다.

답변1

글쎄, 나는 스스로 대답하려고 노력했다.

  • 기능 피드 , 표준 설명자가 tty있는 실제 장치를 찾아야 합니다 .isatty012
  • 실제 tty가 발견되면 이 ttyname함수는 터미널 장치에 대한 경로를 제공합니다.
  • 그것을 열면 open파일 설명자가 제공됩니다.

O_RDONLY선언 (또는 O_WRONLY둘 중 하나)과 플래그 O_NONBLOCK에 의해 부과된 비차단 동작 에도 불구하고 read내 시스템(Debian 12)의 함수는 터미널 장치가 원시 모드로 전환된 후에도 여전히 차단됩니다( 및 tcgetattr함수 사용 ) . ).cfmakerawtcsetattr

ioctlFIONREAD비동기식 읽기는 보류 중/읽기 가능한 바이트를 반환하는 +의 도움으로 구현됩니다. (또한 poll함수를 시도했지만 작동하지만 나에게는 오버헤드처럼 보입니다.)

이제 비동기 쓰기를 구현/테스트하는 방법을 잘 모르겠습니다.

관련 정보