编译.c文件(使用gcc)并运行以从文件中获取输入

时间:2018-09-15 15:18:44

标签: gcc cmd exec

我正在创建一个网站(php)来编译.c文件并使用位于文件中的某些输入来运行.exe文件。我的操作系统是Windows。我正在上传.c文件,然后执行exec(gcc ...)命令。您能否说明上载文件如何编译(如果还有其他更好的方法),使用一些输入来运行并取回结果?

2 个答案:

答案 0 :(得分:0)

运行cmd时,您可能想使用redirection(在yourprog.exe窗口中)。因此,如果您的数据在mydata.txt内部,则可以在命令行中运行yourprog.exe < mydata.txt

fopen有多个参数时(例如,当您运行main时,可以使用file I/O(例如,调用yourprog.exe mydata.txt)。然后,您将测试传递给argc的{​​{1}}何时> 1,在这种情况下,请进行main并从该{{1中读取输入(使用FILE*f = fopen(argv[1], "r");) }}(在检查fscanf不为空之后。)

在编码之前,请务必阅读文档(例如,所使用的每个功能的文档)。不要忘记启用所有警告和调试信息(因此,请使用f进行编译...改进您的代码以获取任何警告)。

当然要读How To Debug Small Programs

  

我正在创建一个网站来编译.c文件并使用一些输入来运行.exe文件

您可能没有明智地做到这一点的技能(涉及巨大的安全风险);如果您这样做了,您将不会用这种含糊的措词问您的问题。为什么不使用godbolt

如果您仍然想在可公开访问的Web服务器上编译并运行任意C代码,则首先应考虑避免使用vulnerabilities(如果在其他大陆的坏人不想入狱,上传了恶意C代码并在您的服务器上运行,并且在这种情况下您可能要负责并承担法律责任)。阅读containerization并注意,大多数解决方案(很难理解)都在Linux之上(因此您需要先学习Linux)

您还可以考虑将C代码转换为Webassembly(或者可能是Javascript),然后在用户的浏览器上运行结果。这并非易事,但可以减轻Web服务器上的风险(因为C代码将在客户端浏览器中运行)。

如果您只想开发一个内部站点(只能从您信任的人在某些Intranet上访问),则可以考虑使用PHP的popen函数(运行某些f命令或运行{{ 1}},并注意其输出)。该PHP函数的灵感来自POSIX popen(3)(您将找到大量示例和解释)。

您可能缺少有关操作系统的基本知识。您可以阅读Operating Systems: Three Easy Pieces来获取它们。还要确保进一步了解HTTP协议和HTML5及其相关技术(AJAX,Websocket等)。您可能也缺少关于它们的知识!

我还倾向于相信Linux(在大多数Web服务器上使用,BTW)对您的目标比Windows更友好。但是您的目标比您所相信的要远大得多,难度更大。

答案 1 :(得分:0)

答案很简单:如果要使用input.txt的输入来运行test.exe文件并将输出保存到output.txt中,则可以使用cmd编写。 test.exe output.txt