사람들이 코드를 온라인으로 컴파일하고 실행할 수있는 웹 사이트를 만들고자 노력 중이므로 사용자가 지침을 보낼 수있는 대화식 방법을 찾아야합니다.proc_open을 사용할 때 STDIN 파이프에서 읽기
실제로 처음 생각한 것은 exec()
또는 system()
이지만 사용자가 sth을 입력하려고하면이 방법이 작동하지 않습니다. 따라서 proc_open()
을 사용해야합니다.
, C 코드를 실행할 때 내가, 내가 처음 STDOUT 스트림을 얻으려면이
$descriptorspec = array(
0 => array('pipe' , 'r') ,
1 => array('pipe' , 'w') ,
2 => array('file' , 'errors' , 'w')
);
$run_string = "cd ".$addr_base."; ./a.out 2>&1";
$process = proc_open($run_string, $descriptorspec, $pipes);
if (is_resource($process)) {
//echo fgets($pipes[1])."<br/>";
fwrite($pipes[0], '12');
fclose($pipes[0]);
while (!feof($pipes[1]))
echo fgets($pipes[1])."<br/>";
fclose($pipes[1]);
proc_close($process);
}
처럼 proc_open()
를 사용하는 다음 코드
int main()
{
int a;
printf("please input a integer\n");
scanf("%d", &a);
printf("Hello World %d!\n", a);
return 0;
}
, 입력 수 두 번째 STDOUT 스트림을 가져옵니다. 그러나 주석 처리 된 행의 주석을 제거한 경우 페이지가 차단됩니다.
문제를 해결할 방법이 있습니까? 모든 데이터가 거기에 놓여있는 것은 아니지만 어떻게 파이프에서 읽을 수 있습니까? 아니면 이런 종류의 양방향 프로그램을 작성하는 더 좋은 방법이 있습니까?
가 종료 될 때까지 우리는 나중에
설문 조사를해야합니까? 이런 식으로 사용자는 서버의 'STDIN'에 직접 액세스하지 못하는 것 같습니다. – Passerby
@Passerby 사용자가 버튼을 눌러 컴파일하고 _x_를 입력하여 서버로 보냅니다. 그러나 _x_를 입력하기 전에 서버는 먼저 STDIN에서 스트림을 가져 와서 웹 사이트에 보내야하므로 사용자는 _x_을 입력해야한다는 것을 알 수 있습니다.문제는 서버가 그 순간에 스트림을 가져올 수 없다는 것입니다. – dahui