2012-05-19 3 views
2

다음을 구현하는 데 도움이 필요합니다.PHP exec() 메소드의 대화식 인수 전달

#include <stdio.h> 

main() 
{ 
    int x; 
    int args; 

    printf("Enter an integer: "); 
    if ((args = scanf("%d", &x)) == 0) { 
     printf("Error: not an integer\n"); 
    } else { 
     printf("Read in %d\n", x); 
    } 
    if ((args = scanf("%d", &x)) == 0) { 
     printf("Error: not an integer\n"); 
    } else { 
     printf("Read in %d\n", x); 
    } 
} 

내가 a.out의 생성 지금은 간부 ("의 a.out", $ 출력)를 사용하여의 a.out이 호출 할 다음과 같이 나는 C 프로그램 파일이 있습니다. 하지만 내 문제는 내가 물어볼 때 정수 값을 전달하는 방법을 얻는 것입니다. 나는 proc_open()을 사용하여 시도했지만 사용법을 이해할 수 없었다. 이 두 값을 전달하고 마지막으로받은 결과를 인쇄 할 수 있도록 PHP 코드를 제공 할 수 있다면 저의 도움에 감사드립니다.

안부

+0

것은 사전에 정수를 알고 계십니까? –

답변

3

내 생각이

$descriptorspec = array(
    0 => array("pipe", "r"), 
    1 => array("pipe", "w") 
); 




$process = proc_open('/full/path/to/a.out', $descriptorspec, $pipes); 

if (is_resource($process)) { 
    list ($out, $in) = $pipes; 

    fwrite($out, "5\n"); 
    fwrite($out, "7\n"); 

    echo stream_get_contents($in); 
} 
+0

와우 .... 예상대로 작동합니다. 고마워 크리스.하지만 a.out에서 오류가 발생하는 경우 어떻게 잡을 까? – user1405309

+0

다른 "w"모드 파이프를 설명자 배열에 추가하면 stderr 프로그램을 읽을 수 있습니다. PHP의 stream_set_blocking() 또는 stream_select() 함수를 조사하여 차단하지 않고 오류 파이프를 검사 할 수 있습니다. – goat

+0

안녕하세요. Chris, 저는 7 번을 통과하지 않으면 내 프로그램이 prinf() 문에 대해 5라는 값을 인쇄하고있는 상황이 있습니다. 왜 두 scanf() 문에 대해 동일한 값을 선택하는지 이해할 수 없습니다. – user1405309