
편집하다:기본 예제를 Zork Dungeon에서 기본 OS 셸로 변경했습니다.
최신 컴퓨터에서 실행되는 콘솔 응용 프로그램이 있습니다. 나는 또한 직렬 COM 연결을 통해 단순 터미널로 작동할 수 있는 슈퍼 직렬 카드가 있는 Apple //e를 가지고 있습니다(자세한 내용은 그 이상은 쓸모가 없습니다). USB 직렬 포트를 사용하면 이 두 장치를 제대로 연결할 수 있습니다.
최신 시스템에서 Linux를 부팅하면 COM 설정을 구성하고 장치 파일이 속한 그룹에 대한 권한을 나에게 부여하여 다음을 실행할 수 있습니다.
$ bash </dev/ttyUSB1 >/dev/ttyUSB1 2>/dev/ttyUSB1
Apple에서 bash 세션을 얻습니다. Linux 시스템은 서버 역할을 하고 프로그램을 실행하지만 입력 및 출력은 간단한 클라이언트인 Apple로 이동합니다. 이는 dungeon
(Zork) 와 같은 보다 전용 프로그램에서도 작동합니다 .
Windows에서 동일한 작업을 어떻게 수행합니까? 분명히 Windows에서는 한 번에 한 위치에서만 포트를 열 수 있으므로 위의 솔루션을 정확하게 복제할 수는 없습니다. COM
위 명령의 Windows 아날로그를 실행하면
C:\> cmd <COM4 >COM4 2>COM4
액세스 거부 오류가 발생합니다.
COM 포트로 데이터를 보낼 수 있습니다.
C:\> echo "Hello" >COM4
COM 포트에서 원시 입력(제어 및 이스케이프 문자 포함!)을 읽습니다.
C:\> type <COM4
하지만 동시에, 동일하거나 별도의 프로세스에서 두 가지를 모두 수행할 수는 없습니다.
저는 PuTTY와 RealTerm을 사용해 보았으나 둘 다 Windows 시스템에서만 Apple을 작동할 수 있었습니다. 이는 연결이 작동한다는 것을 증명했지만 제가 원하는 것과 정확히 반대 방향이었습니다. 연결된 터미널에서 액세스할 수 있도록 Windows 콘솔 애플리케이션을 호스팅하려면 어떻게 해야 합니까?
답변1
편집하다:질문 설명 후 "재답변"
에 따르면마이크로소프트Using command redirection operators
( XP보다 최신 Windows에 대한 섹션을 찾을 수 없습니다 ):
핸들 복제
& 리디렉션 연산자는 지정된 한 핸들의 출력 또는 입력을 지정된 다른 핸들로 복제합니다. 예를 들어 dir 출력을 File.txt로 보내고 오류 출력을 File.txt로 보내려면 다음을 입력합니다.
디렉토리>c:\file.txt 2>&1
핸들을 복제하면 원래 핸들 발생의 모든 특성이 복제됩니다. 예를 들어 핸들에 쓰기 전용 액세스 권한이 있는 경우 해당 핸들의 모든 복제본에는 쓰기 전용 액세스 권한이 있습니다. 읽기 전용 액세스 권한이 있는 핸들을 쓰기 전용 액세스 권한이 있는 핸들에 복제할 수 없습니다.
좋은 소식은 다음과 같습니다.
<COM4 >COM4 2>COM4
으로 변경할 수 있습니다<COM4 >&1 2>&1
.
나쁜 소식은 다음과 같습니다.
- 읽기 전용
<COM4
및 쓰기 전용 핸들 액세스 요구 사항을 혼합하고 있으며 으로>&1 2>&1
변경하고 있습니다 .Access Denied
The handle could not be duplicated during redirection of handle 1
변경하는 경우:
<COM4 >&1 2>&1
to>COM4 2>&1 <&1
(읽기 전용과 쓰기 전용이 여전히 혼합되어 있음) 작동하고 사용할 수 있는STDOUT
및 을 제공STDERR
하지만STDIN
여전히 손상된 것 같습니다*. (*)몇 가지 테스트를 해봤지만STDIN
안되는 것 같습니다...
그러나 이를 해결하기 위한 한 가지 해결 방법을 볼 수 있습니다.
- 사용
com0com
널 모뎀 에뮬레이터3개의 가상 포트 쌍을 정의합니다.COM_O
- 을COM_O4
위한STDOUT
;COM_E
- 을COM_E4
위한STDERR
;COM_I
- 을COM_I4
위한STDIN
.
, 및 : 의
hub4com.exe
(com0com
부분)을 사용하여 직렬 허브를 만듭니다 .COM_O4
COM_E4
COM_I4
COM4
hub4com.exe --route=0:1 --route=2,3:0 --baud=19200 --data=8 --parity=no --stop=1 --octs=off --odsr=off --ox=off --ix=off --idsr=off --ito=0 \\.\COM4 \\.\COM_I4 \\.\COM_E4 \\.\COM_O4
- 적절한(귀하가 소유한) 전송 매개변수를 설정하는 것을 기억하십시오:
--baud
...
그리고
<\\.\COM_I >\\.\COM_O 2>\\.\COM_E
명령줄을 구성합니다.
마지막으로:
hub4com.exe --route=0:1 --route=2,3:0 --octs=off \\.\COM4 \\.\COM_I4 \\.\COM_E4 \\.\COM_O4
그리고:
cmd <\\.\COM_I >\\.\COM_O 2>\\.\COM_E
Windows 명령줄 COM4
이 켜져 있습니다 19200 8N1
.