我觉得你的问题是两部分。
- node.js 的 PHP exec 等效项
- 执行 C 程序并使用 node.js 提供其输出。
坚持使用纯node.js,您将能够使用以下代码执行并访问stdout和stderr。
var exec = require('child_process').exec;
exec("ls -l", function(error, stdout, stderr) {
console.log(error || stdout || stderr);
});
对于#2,
我不确定你是否可以直接执行“c”程序,所以我想你需要做这样的事情
var exec = require('child_process').exec;
exec("gcc ~/tools/myprog.c -o prime && ./prime", function(error, stdout, stderr) {
console.log(error || stdout || stderr);
});
上面的代码绝对不是线程安全的,如果并发请求,它会中断,理想情况下你不会为每个请求编译它,你会为第一个请求编译和缓存(你可以匹配源的时间戳和编译的输出,如果编译的输出不存在或它的时间戳更小 - 比源代码更早,那么你需要编译它),然后在后续请求中使用缓存的输出。
在快递中,您可以执行以下操作
var exec = require('child_process').exec;
router.get('/prime/:num',function(req, res, next){
exec("gcc ~/tools/myprog.c -o prime && ./prime " + req.params.num, function(error, stdout, stderr) {
if(error){
res.status(400).json({'message': error.message});
return;
}
if(stderr){
res.status(400).json({'message': stderr});
return;
}
res.status(200).json({'result': stdout});
});
});
你可以使用上面的代码 sn-ps 并得到你想要的。
希望这会有所帮助。如果您还需要什么,请告诉我。