2013-07-09 5 views
7

아래에서 작업하고 싶은 시나리오를 대략적으로 설명합니다.다른 C++ 프로그램에서 C++ 프로그램을 실행하는 방법은 무엇입니까?

주 응용 프로그램이 하나 있습니다. 사용자 상호 작용을 기반으로하는이 응용 프로그램은 보안 환경/셸 내에 다른 응용 프로그램을로드 할 수 있습니다. 이는 이러한 하위 응용 프로그램이 OS와 더 이상 상호 작용할 수 없으며 상호 작용할 수 없음을 의미합니다.

상위 프로그램은 언제든지 이러한 하위 프로그램의 기능을 호출 할 수 있습니다. 하위 프로그램은 언제든지 이러한 상위 프로그램의 기능을 호출 할 수 있습니다.

누구든지 이것을 C++로 구현하는 방법을 알고 있습니까? 부모와 자식 모두 C++로 작성해야합니다.

상위 응용 프로그램 내에서 하위 응용 프로그램을로드하는 성능은 중요하지 않습니다. 중요한 것은 서로의 기능을 호출 할 때 자녀와 부모 간의 의사 소통을 수행하는 것입니다.

+7

'fork()'+'exec()'일련의 함수가 도움이 될 것입니다. –

+0

"하위 응용 프로그램"이 이미 컴파일되어 있습니까? –

+0

DLL을 사용 해본 적이 있습니까? 마음에 "어린이 응용 프로그램"을 정확히 구별하는 것은 무엇입니까? 정의에서 "안전한 환경"이란 무엇입니까? "자식 호출 부모 기능"은 무엇을 수반합니까? – Floris

답변

3

자신 만의 컴파일러를 작성해야합니다.

고려 : 일반적인 OS는 원하는 것을 지원하지 않습니다. 두 실행 파일이 단일 프로세스 내에서 실행되기를 원하지만 OS가 전혀 이해할 수없는 프로세스 내의 이상한 부분에 따라 OS 호출을 만들거나 만들지 않을 수도 있습니다.

더 이상 사용자 정의 컴파일러에서 문제가되지 않습니다. 문제가되는 명령어를 생성하지 않기 때문입니다. Java 및 .Net과 유사합니다. Java 및 .Net은 이러한 제어가 불가능한 OS 호출을 방지합니다.

+0

하위 프로세스가 OS에 액세스 할 수 없습니다. 실행 파일 일 필요는 없습니다. 그것들은 별도의 프로세스가 될 수 있지만 당신이 그들에 대한 어떠한 제어도 할 수 없다는 의미는 아닙니다. –

+2

그들은 별도의 프로세스가 될 수 없습니다. 간단한 : 프로세스 경계에서 함수를 호출 할 수 없습니다. – MSalters

+1

... RPC 메커니즘을 함수 호출로 계산하지 않는 한 (느슨하게 충분히 말할 수 있다면) –

2

휴대용 용액 : Google Native Client

한가지 가능한 리눅스 용액 "모자」와

  1. 만들기 AppArmor의 프로파일 (a"모자 "어플리케이션 libapparmor로 프로그래밍으로 전환 할 수있는 시스템에 샌드 구성 임) ,
  2. 메인 어플리케이션 "포크"이, 메인 프로그램이 "파이프"를 만들 "모자"공동으로
  3. 변화가
  4. "exec"자식 응용 프로그램,
  5. 주 응용 프로그램과 자식 응용 프로그램은 앞에서 만든 "파이프"를 통해 통신합니다.
+0

제 생각에 이것은 아이가 OS와 상호 작용하는 것을 막지는 못하지만, 이것이 중요합니다. –

+0

Binero는 "안전한 환경"과 "자식이 OS와 상호 작용하지 못하도록"하는 것을 하나도 같지 않습니다. 후자는 거의 실용 가치가 거의 없습니다. – ArtemGr

0

크로스 플랫폼 방식으로이 작업을 수행하려면 RPC를 사용하여 다른 프로세스에서 함수를 호출 할 수 있습니다. 분산 컴퓨팅 환경을 지원하는 모든 것에 대해 작업 할 것입니다. 그것은 한동안 주변에 있었고 msdn 문서는 Windows의 일부가 프로세스 간 통신을 위해 사용하기 때문에 충분히 빠르다고 말합니다. 여기에 msdn에 관한 튜토리얼이 있습니다. 당신을 데려오고 실행해야합니다. http://msdn.microsoft.com/en-us/library/windows/desktop/aa379010.aspx 나쁜 부분은 리눅스에서 사용하는 방법에 관한 튜토리얼을 찾을 수 없다는 것입니다.

RPC를 사용하고 싶지 않거나 주제에 대한 좋은 설명서를 찾기가 너무 어려울 경우 유닉스 시스템의 표준 IPC (Inter Process Communication) 메커니즘을 사용하여 특정 프로세스를 호출해야하는 프로세스에 신호를 보낼 수 있습니다 기능. 매우 빠르고 가볍기 때문에 메시지 대기열을 권하고 싶습니다. 여기에서 자습서를 찾을 수 있습니다. http://www.cs.cf.ac.uk/Dave/C/node25.html

관련 문제