us.file.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 
  2. var fs = require('fs');
  3. var cp = require('./us.clang.js');
  4. //根据前端代码生成一个Guid的唯一文件,以供gcc编译。如果gcc支持编译内存流就不用生成文件了
  5. //s代表了文件内容,f代表了文件名 type代表了文件类型
  6. exports.createFileStream = function (res, s, f, type) {
  7. //c语言明确规定要后缀为.c。所以全部加后缀,不然可以省下一些代码。
  8. var _suf;//后缀
  9. switch (type) {
  10. case 'C': _suf = '.c'; break;
  11. case 'PHP': _suf = '.php'; break;
  12. case 'Net': _suf = '.cs'; break;
  13. case 'Python': _suf = '.py'; break;
  14. case 'Nodejs': _suf = '.js'; break;
  15. case 'Ruby': _suf = '.rb'; break;
  16. case 'Perl': _suf = '.pl'; break;
  17. case 'Lisp': _suf = '.lisp'; break;
  18. default: break;
  19. }
  20. var wstream = fs.createWriteStream('./output/userfiles/'+ f + _suf);//保存文件
  21. s = decodeURIComponent(s);
  22. wstream.write(s);
  23. // on Node.js older than 0.10, add cb to end()
  24. wstream.end(function () {
  25. //console.log('生成文件成功');//执行编译命令。
  26. switch (type) {
  27. case 'C': cp.exegcc(res, f, type); break;
  28. case 'PHP': cp.exephp(res, f, type); break;
  29. case 'Net': cp.exenet(res, f, type); break;
  30. case 'Python': cp.exepython(res, f, type); break;
  31. case 'Nodejs': cp.exenodejs(res, f, type); break;
  32. case 'Ruby': cp.exeruby(res, f, type); break;
  33. case 'Perl': cp.exeperl(res, f, type); break;
  34. case 'Lisp': cp.exelisp(res, f,type); break;
  35. default: break;
  36. }
  37. });
  38. }