Чтение из канала STDIN при использовании proc_open

Я пытаюсь создать веб-сайт, на котором люди могут компилировать и запускать свой код в Интернете, поэтому нам нужно найти интерактивный способ для пользователей отправлять инструкции.

На самом деле, первое, что приходит на ум, этоexec() или жеsystem(), но когда пользователи хотят ввести sth, этот способ не будет работать. Поэтому мы должны использоватьproc_open().

Например, следующий код

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

Когда я использовалproc_open(), нравится

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

При запуске кода C я хочу получить первый поток STDOUT и ввести число, а затем получить второй поток STDOUT. Но если я прокомментирую строку без комментариев, страница будет заблокирована.

Есть ли способ решить проблему? Как я могу прочитать из канала, пока не все данные были помещены туда? Или есть лучший способ написать такую интерактивную программу?

Ответы на вопрос(1)

Ваш ответ на вопрос