2012-06-04 5 views
1

Je travaille actuellement sur un programme en ligne. J'écris un script php qui exécute une commande dans la ligne de commande avec proc_open() (sous Linux Ubuntu). Ceci est mon code à ce jour:Plusieurs entrées avec proc_open()

<?php 
$cmd = "./power"; 

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

$process = proc_open($cmd, $descriptorspec, $pipes); 

if (is_resource($process)) { 

    fwrite($pipes[0], "4"); 
    fwrite($pipes[0], "5"); 
    fclose($pipes[0]); 

    while($pdf_content = fgets($pipes[1])) 
    { 
     echo $pdf_content . "<br>"; 
    } 
    fclose($pipes[1]); 

    $return_value = proc_close($process); 
} 
?> 

puissance est un programme qui demande l'entrée 2 fois (il faut une base et un exposant et calcule la base^exposant). C'est écrit en Assemblée. Mais quand j'exécute ce script, je me trompe de sortie. Ma sortie est "1" mais j'attends 4^5 comme sortie. Lorsque j'exécute un programme qui prend une entrée, cela fonctionne (j'ai testé un programme facile qui incrémente la valeur entrée d'un).

Je pense qu'il me manque quelque chose concernant la commande fwrite. Quelqu'un pourrait-il m'aider s'il vous plaît?

Merci d'avance!

Répondre

2

Vous avez oublié d'écrire un retour à la ligne, votre programme pensera qu'il n'a reçu que 45 comme entrée. Essayez ceci:

fwrite($pipes[0], "4"); 
fwrite($pipes[0], "\n"); 
fwrite($pipes[0], "5"); 
fclose($pipes[0]); 

ou moins:

fwrite($pipes[0], "4\n5"); 
fclose($pipes[0]); 
+0

Merci! C'était le problème :) – Devos50