php – 使用proc_open时从STDIN管道读取

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用proc_open时从STDIN管道读取脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@ 我正在尝试建立一个人们可以在线编译和运行代码的网站,因此我们需要找到一种用户发送指令的交互方式.

实际上,首先想到的是exec()或system(),但是当用户想要输入时,这种方式将无法工作.所以我们必须使用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流.但如果我将注释行取消注释,该页面将被阻止.

有没有办法解决这个问题?我怎样才能从管道读取而不是所有数据都放在那里?或者有更好的方法来编写这种交互式程序吗?

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用proc_open时从STDIN管道读取全部内容,希望文章能够帮你解决php – 使用proc_open时从STDIN管道读取所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。