2010-05-23 4 views
1

표준 입력에서 읽고 표준 출력에 쓰는 2 개의 Windows 콘솔 응용 프로그램이 있습니다. 나는 그들 중 어떤 것에 대한 소스 코드를 가지고 있지 않다고 가정하고 싶다 (실제로 나는 그들 중 하나의 소스 코드를 갖고있다).2 개의 실행 파일을 Windows에서 양방향으로 통신하는 방법

하나의 표준 출력을 다른 표준 입력으로 지정하거나 반대의 경우도 가능하므로 통신이 가능합니다. 목표는 특정 게임을 실행하는 두 프로그램이 서로 경쟁 할 수있게하는 것입니다.

어떻게이 작업을 수행 할 수 있습니까? 나는 C/C++ 프로그래밍이나 다른 어떤 것을 할 의향이있다.

오렌.

답변

1

스트림 리디렉션은 항상 비순환 그래프를 형성하기 때문에 콘솔에서는 할 수 없습니다.

찾고있는 순환 리디렉션을 얻으려면 실행 파일을 모두 호출하는 작은 프로그램을 코딩하고 각 프로세스의 입력 및 출력 스트림 배선을 관리 할 수 ​​있습니다. 연결된 각 스트림 쌍 (각 프로그램의 입력 스트림과 출력 스트림)에는 출력 스트림에서 데이터를 가져 와서이를 입력 스트림으로 밀어 넣기위한 스레드가 필요합니다. 따라서 입/출력 스트림 쌍이 2 세트이므로 2 스레드가 필요합니다.

  • 두 완충제, B1 및 B2를 생성 : 여기

    다양한 스트림을 연결하는 단계이다.
  • 프로그램 (1)을 시작하고 입력 및 출력 스트림 핸들을 가져옵니다.
  • 은 P1을 버퍼 B1의 입력쪽에 연결하고 P1은 버퍼 B2의 출력 쪽으로 출력합니다.
  • 시작 프로그램 2, (P2) 입력 및 출력 스트림 핸들 가져 오기
  • P2 입력을 버퍼 B2의 입력쪽에 연결하고 P2 출력을 버퍼 B1의 출력쪽에 연결합니다. (이 B1/B2는 위의 P1 연결과 반대입니다.)

버퍼는 입력 쪽에서 읽고 출력쪽에 쓰는 활성 스레드입니다.

버퍼는 입력측에서 스트림의 끝을 감지하고 이에 따라 출력면을 닫아야합니다. 양쪽이 닫히면 버퍼를 실행하는 스레드가 종료 될 수 있습니다.

+0

감사! 그것은 작동합니다. 나는 kerkeslager가 제안한 것처럼이 스레딩 아이디어를 파이썬으로 구현했다. 고마워! – user302099

0

두 프로세스를 상위 프로세스의 하위 프로세스로 만들어 두 프로세스간에 메시지를 전달해야하므로 상위 프로세스를 작성해야합니다.

해결할 수있는 언어가 많이 있습니다. 개인적으로 저는 Python의 subprocess 모듈을 사용하여이 문제에 접근했습니다. 이것은 기본적으로 C/C++에서 액세스 할 수있는 _popen()을 둘러싼 래퍼입니다. 그러나 빠른 Google 검색이 어떤 지표가된다면 Python을 배우는 것이 더 쉽습니다. Ruby에 대해 알고 있다면 Ruby와 비슷한 라이브러리가 있습니다.

어쨌든 소켓을 사용하면 stdinstdout을 사용하는 것보다 더 깨끗하고 안정적인 접근 방식이라고 생각합니다.

+0

고맙습니다. 파이썬은 훌륭한 솔루션이라고 생각합니다. 소켓은 옵션이 아닙니다 (불행히도). 나는 아직도 문제가있다 : 매번 읽을 프로세스. 한 프로세스에서 다른 프로세스가 뭔가를 쓸 때까지 기다리는 동안 읽으려고하면 문제가됩니다. 아마도 '선택'과 같은 작업을 수행해야하지만, 시도하고 들었다면 Windows에서 작동하지 않습니다. 할 수있는 작업은 무엇입니까? 감사. – user302099

관련 문제