2010-12-03 7 views
6

저는 OCaml을 처음 접했고 OCaml 내에서 외부 프로그램을 호출하는 방법을 알아 내려고했습니다.OCaml 내에서 외부 프로그램 호출하기

나는 문서 here 다음, 다음과 같은 호출을 만들어 왔습니다 :

string array -> 'a = <fun> 

가 정확히 어떻게 내가 반환 된 익명 함수에 액세스 할 :

Unix.execv "cat text_file";; 

이 다음 반환을?

cat text_file은 실제로 파일의 내용을 인쇄하려고하는데 실제로 실행하려는 명령은 좀 더 복잡합니다. 그러나 나는이 프로그램을 실행할 수 있다면 실제 프로그램을 실행할 수 있어야한다고 생각합니다.

답변

10

execv의 첫 번째 인수는 실행할 프로그램이고 두 번째 인수는 인수가 포함 된 배열입니다. 또한 execv에는 프로그램의 전체 경로가 필요합니다. execvp을 사용하여 실행 경로에서 프로그램을 조회 할 수 있습니다. 또한 프로그램의 첫 번째 인수는 프로그램 자체의 이름입니다. "/bin/cat"을 첫 번째 인수로 사용하고 "cat text_file"[| "cat"; "text_file" |]을 두 번째 인수로 사용하거나 execvp으로 호출하고 첫 번째 인수로 "cat"을 전달합니다.

그러나 실제로는 system이 아닌 execv이 실제로 필요합니다. system 당신은 당신이 원하는처럼 하나의 문자열을 통과 할 수 있다는

참고 execv 당신이 당신의 프로그램을 수행하고 호출 애플리케이션은 프로세스에 소요되는 execv 전화하면 결코 즉, 반환 (system 달리).

8

sepp2k의 말 외에 create_process (Unix.file_descr) 또는 open_process (채널)을 사용하는 것이 좋습니다. 이 함수는 fork/exec를 수행하고 프로세스의 I/O를 리디렉션합니다. 그렇게하면 system으로는 처리 할 수없는 프로세스와 통신 할 수 있습니다.

당신이 당신의 프로그램에 cat의 출력을 읽고 싶다면, 당신은 pipe 함수를 사용하여 파이프를 만든 다음 create_process에 대한 반환 file_descrs를 사용할 수 있습니다.

관련 문제