脚本宝典收集整理的这篇文章主要介绍了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,请注明来意。