我想使用 php 在远程计算机上运行 C 程序。最终目标是使用手机或任何其他计算机上的网络浏览器来控制程序。
我的 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');
效果很好,但如果我使用 php 脚本会挂起 fwrite($pipes[0], '');
以保持程序运行......
编辑:我在没有成功的情况下调查了缓冲问题$process = proc_open('stdbuf -i0 /home/tristan/www/a.out', $descriptorspec, $pipes, $cwd, $env);
......
有没有人知道如何以交互方式监视值和向程序发送命令?
谢谢你的帮助!