Linux에서 Xterm의 -S 옵션 (Pass Pseudo Terminal Name 및 Descriptor)은 어떻게 작동합니까?

StackOverflow https://stackoverflow.com/questions/1166493

  •  19-09-2019
  •  | 
  •  

문제

인사말, 오래된 Solaris 2.4 코드를 Centos 5.3로 포팅하면서 나는

/usr/bin/xterm -S%s%d ...

여기서 %S는 00과 같은 2 자 숫자 시퀀스 XX, 01 및 %D는 숫자 파일 디스크립터입니다. 이것은 분명히 /dev /ttypxx (의사 단말기 슬레이브)를 사용하도록 Xerm을 말하는 방법 이었지만 코드는 해당 마스터를 열고 대신 파이프 (2)를 호출하고 전달하는 데 귀찮은 일이 아닙니다. 쓰다 위의 %D 대체로서 FD. Solaris에서, Spawner 의이 쓰기 FD에 글을 쓰면 Xterm Child에 출력이 나타납니다. Strace (1)에서 나는 /dev 아래에 아무것도 열려고 시도하지 않았다.

도움이 되었습니까?

해결책

에 따르면 Solaris Manpage, 파이프 시스템 호출은 두 개를 만듭니다 양방향 파이프. 따라서 Solaris에서는 읽기 및 쓰기에 FD를 모두 사용할 수 있습니다.

fildes [0] 및 fildes와 관련된 파일1 스트림이며 읽기와 쓰기를 위해 열립니다.

그러나 파이프 (2) Linux의 맨 페이지에 따르면 :

파이프 ()는 파이프를 생성합니다.

파이프 (7)의 다음을 참고하십시오.

일부 시스템 (Linux는 아님)에서 파이프는 양방향입니다. 파이프 끝 사이의 양방향으로 데이터를 전송할 수 있습니다. Posix.1-2001에 따르면 파이프는 단방향 일만하면됩니다. 휴대용 응용 프로그램은 양방향 파이프 의미에 의존하지 않아야합니다.


따라서 Linux에서는 PipeFD를 통과 할 수 없습니다1, 쓰기 종료는 양방향 통신을위한 FD를 기대하기 때문에 XPRERT에. 작동하려면 OpenPty ()를 사용하고 슬레이브 FD를 XTerm으로 전달해야합니다.

Afaik, Openpty는 Solaris에서 사용할 수 없습니다. 코드가 사용하지 않는 이유 인 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top