2

我目前正在开发一个在线程序。我正在编写一个 php 脚本,它使用 proc_open()(在 Linux Ubuntu 下)在命令行中执行命令。到目前为止,这是我的代码:

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

power 是一个要求输入 2 次的程序(它需要一个底数和一个指数并计算底数 ^ 指数)。它是用汇编写的。但是当我运行这个脚本时,我得到了错误的输出。我的输出是“1”,但我希望输出 4^5。

当我运行一个接受一个输入的程序时,它可以工作(我测试了一个简单的程序,它将输入的值加一)。

我想我错过了关于 fwrite 命令的一些东西。有人可以帮我吗?

提前致谢!

4

1 回答 1

3

你忘了给管道写一个换行符,所以你的程序会认为它只是45作为输入。试试这个:

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

或更短:

fwrite($pipes[0], "4\n5");
fclose($pipes[0]);
于 2012-06-04T11:50:31.300 回答