Home  >  Article  >  Backend Development  >  php中的proc_open+fwrite应用有关问题

php中的proc_open+fwrite应用有关问题

WBOY
WBOYOriginal
2016-06-13 13:11:441063browse

php中的proc_open+fwrite应用问题
我想在php用proc_open调用一个c++写的exe程序,由于里面有要求输入参数所以我用fwrite写入终端,php代码如下

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php $descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "error-output.txt", "a") // stderr is a file to write to
);

$process = proc_open("d:\\64test.exe", $descriptorspec, $pipes);

if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt
    
    fwrite($pipes[0], "q");
    fclose($pipes[0]);
    while (!feof($pipes[1])) 
    {
        $result = fgets($pipes[1], 1024);
        echo "r:$result<br>";
    }
    fclose($pipes[1]);
    
    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close  ($process);

    echo "command returned $return_value<br>";
}
?>

c++代码如下
C/C++ code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
    char buf[1024]={0};
    /*fgets(buf,sizeof(buf),stdin);*/
    while(buf[0]!='q')
    {
        std::cin>>buf;
        std::cout</iostream>

上面的c++是简化的代码
(1)问题是我的c++中代码是个while循环要求持续的输入
问php中应该怎么写,现在的的php中只能fwrite($pipes[0], "q");,其它的就不行
(2)上面那段程序到能正常打印
r:q
command returned -3
我在另一个非常复杂的cpp程序去始终打印如下:
r:
command returned -1073741515
后来我在main中把其他的代码都注释掉直接复复制上面简单的c++代码到我的工程中结果还是上面的,这是我最纳闷的地方,有人遇到过么

求教高人,万分感谢

------解决方案--------------------
fwrite($pipes[0], "cmd1\ncmd2\ncmd3\nq"); 试试看
------解决方案--------------------
啥意思?
他让你将逐次输出的数据组装成串后一次性输出
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn