如果你发现这个问题,我很抱歉(再次)。但我真的遇到了 proc_open 的问题。
我有 C文件,我想使用proc_open()
运行它,并从文本文件中读取输入。我能够获取并将输入提供给可执行文件。问题是我刚刚对array of fetched strings
进行了硬编码。
PHP代码片段:
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "error.log", "a")
);
$process = proc_open('C:/xampp/htdocs/ci_user/add2', $descriptorspec, $pipes);
sleep(1);
if (is_resource($process)) {
//Read input.txt by line and store it in an array
$input = file('C:/xampp/htdocs/ci_user/input.txt');
//Feed the input (hardcoded)
fwrite($pipes[0], "$input[0] $input[1]");
fclose($pipes[0]);
while ($s = fgets($pipes[1])) {
print $s."</br>";
flush();
}
fclose($pipes[1]);
}
add2.c
#include <stdio.h>
int main(void) {
int first, second;
printf("Enter two integers > ");
scanf("%d", &first);
scanf("%d", &second);
printf("The two numbers are: %d %d\n", first, second);
printf("Output: %d\n", first+second);
}
管道上的流[1](printf's)
Enter two integers > The two numbers are: 8 2
Output: 10
问题:“ $ input ”元素如何作为输入 p>
fwrite($pipes[0], "$input[0] $input[1]");
或者是否有更方便的方法从文件获取输入并在scanf
运行的C可执行文件中proc_open()
时提供输入。
(顺便说一句,对于那些在proc_open()
遇到麻烦的人,特别是像我这样的初学者,我希望我的代码可以帮助你。这是我第一次让它在几次尝试后运行,所以我的代码很简单。 )
对于Pro,请帮助meeeee。 :(谢谢!
答案 0 :(得分:2)
答案 1 :(得分:1)
do {
$r = array($descriptorspec[1], $descriptorspec[2]);
$w = array($descriptorspec[0]);
$ret = stream_select($r, $w, $e, null);
foreach($r as $s) {
if($s === $descriptorspec[1]) {
// read from stdout here
} elseif($s === $descriptorspec[2]) {
// read from stderr here
}
}
foreach($w as $s) {
if($s === $descriptorspec[0]) {
// write to stdin here
}
}
} while($ret);