PHP を使用して、リモート コンピューターで C プログラムを実行したいと考えています。最終的な目標は、電話またはその他のコンピューターの Web ブラウザーを使用してプログラムを制御することです。
私の C プログラムは、数十分の間にさまざまなセンサーからデータを取得しています。これは Linux のコマンド ラインから実行され、コンピューター キーボードの「q」キーを押すことでオフにできます。メインスレッドは次のようなものです:
int main(){
printf("Program is running... Press 'q' <enter> to quit\n");
fflush(stdout);
//create one thread per sensor
while (getchar() != 'q'){
}
//ask the threads to terminate
return(0);
}
各スレッドは、いくつかの printf を実行して、各センサーのステータスを示します。電話でこれらの値を監視し、リモート プログラムを終了するボタンを付けたいと思います。
system()、open()、または proc_open() を使用して値を正常に監視できます。問題は、メイン プログラムの getchar です。それはphpスクリプトをハングアップさせます...
<?php
if(isset($_POST['start'])){
$descriptorspec = array(
0 => array("pipe", "r"), // // stdin est un pipe où le processus va lire
1 => array("pipe", "w"), // stdout est un pipe où le processus va écrire
2 => array("file", "/tmp/error-output.txt", "a") // stderr est un fichier
);
$cwd = '/tmp';
$env = array();
$process = proc_open('/home/tristan/www/a.out', $descriptorspec, $pipes, $cwd, $env);
if (is_resource($process)) {
fwrite($pipes[0], 'q');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);
echo "La commande a retourné $return_value\n";
}
}
?>
使用fwrite($pipes[0], 'q');
はうまくいきます fwrite($pipes[0], '');
が、プログラムを実行し続けるために使用すると、phpスクリプトがハングします...
編集:成功せずにバッファリングの問題を調査しました$process = proc_open('stdbuf -i0 /home/tristan/www/a.out', $descriptorspec, $pipes, $cwd, $env);
...
インタラクティブな方法で値を監視し、コマンドをプログラムに送信する方法についての手がかりを持っている人はいますか?
助けてくれてありがとう!