2013-09-26 81 views
1

如果您發現此問題noob,我很抱歉(再次)。但我真的有問題proc_open使用proc_open()在PHP中運行C可執行文件

我有一個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的)

Enter two integers > The two numbers are: 8 2 
Output: 10 

問:是否有一個「動態的方式」的「$輸入」元素將如何進行佈局作爲輸入的

  fwrite($pipes[0], "$input[0] $input[1]"); 

或者是有一個更方便的方式來獲得一個輸入文件,並在proc_open()運行的C可執行文件中有scanf時提供。

(順便說一句,對於那些具有proc_open()麻煩,尤其是對於像我這樣的初學者,我希望我的代碼幫你弄好了。這是我第一次以使其嘗試幾次後運行的,所以我的代碼很簡單。)

對於親們,請幫助我。 :(謝謝

+0

感謝@ joran-DEN-houting爲編輯:) – user2800050

+0

沒問題高興你有你的答案:) –

回答

1

使用stream_select:!?!

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); 
+0

謝謝@Marek!一定會嘗試這一個! – user2800050

相關問題