Я чувствую, что ваш вопрос 2 части.
Exec эквивалентно
- PHP для Node.js
- исполняющих программу C и обеспечивают его из положить с помощью Node.js.
Придерживаясь чистого узла.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});
});
});
Вы можете играть с выше фрагменты кода и получить то, что вы ищете.
Надеюсь, это поможет. Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще.
use [shelljs] (https://www.npmjs.com/package/shelljs) – Xorifelse