我想写一段C
软件(如素数因子分解)并将其放在我的网络服务器上(基于Node.js
)。
然后我想要一个HTML
- 带有表单和按钮的文档。
单击该按钮时,{(1}} - 程序应该(在服务器上)执行,并将表单的文本字段作为输入参数传递。该
C
- 程序的输出应再次传递给C
- 文本字段。
在HTML
这样的事情是可能的:
PHP
我如何在<?php
exec('~/tools/myprog.o');
?>
中进行类似的操作(Node.js
也很好)。特别是输入/输出重定向?
答案 0 :(得分:2)
我觉得你的问题是2部分。
坚持使用纯node.js,您可以使用以下代码执行并访问stdout和stderr。
var exec = require('child_process').exec;
exec("ls -l", function(error, stdout, stderr) {
console.log(error || stdout || stderr);
});
对于#2, 我不确定你是否可以直接执行&#34; c&#34;程序,所以我想你需要做这样的事情
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});
});
});
您可以使用上面的代码段来获取您想要的内容。
希望这会有所帮助。如果您还有其他需要,请告诉我。