Czytanie z potoku STDIN podczas używania proc_open

Próbuję stworzyć stronę internetową, na której ludzie będą mogli skompilować i uruchomić swój kod online, dlatego musimy znaleźć interaktywny sposób wysyłania instrukcji przez użytkowników.

Właściwie najpierw przychodzi mi na myślexec() lubsystem(), ale gdy użytkownicy chcą wprowadzić coś, ten sposób nie zadziała. Więc musimy użyćproc_open().

Na przykład następujący kod

int main()
{
    int a;
    printf("please input a integer\n");
    scanf("%d", &a);
    printf("Hello World %d!\n", a);
    return 0;
}

Kiedy użyłemproc_open(), lubię to

$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);
}

Podczas uruchamiania kodu C chcę pobrać pierwszy strumień STDOUT i wprowadzić numer, a następnie pobrać drugi strumień STDOUT. Jeśli jednak komentarz nie zostanie zakomentowany, strona zostanie zablokowana.

Czy istnieje sposób na rozwiązanie problemu? Jak mogę odczytać z rury, gdy nie wszystkie dane zostały tam umieszczone? A może jest lepszy sposób na napisanie tego rodzaju interaktywnego programu?

questionAnswers(1)

yourAnswerToTheQuestion