我正在创建一个网站(php)来编译.c文件并运行.exe文件,其中包含一些位于文件中的输入。我的操作系统是windows。我正在上传.c文件,然后我执行exec(gcc ...)命令。你能告诉上传文件如何编译的方式(如果是其他更好的方法),运行一些输入并收回结果?
你可能想在运行redirection时使用cmd
(在你的yourprog.exe
窗口中)。因此,如果您的数据位于mydata.txt
内,您将在命令行中运行yourprog.exe < mydata.txt
。
当你的file I/O有多个参数时(例如当你运行fopen
时),你可以使用main
(例如调用yourprog.exe mydata.txt
)。那么你将测试当argc
传递到你的main
> 1并且在这种情况下做FILE*f = fopen(argv[1], "r");
并从那个fscanf
读取你的输入(使用f
)(在检查了f
不为空之后)。
在编码之前,请务必阅读文档(例如,您使用的每个功能)。不要忘记启用所有警告和调试信息(因此使用gcc -Wall -Wextra -g yourprog.c -o yourprog.exe
进行编译...改进代码以获取警告)。
当然读How To Debug Small Programs
我正在创建一个网站来编译.c文件并使用一些输入运行.exe文件
您可能没有明智地做到这一点的技能(涉及巨大的安全风险);如果你这样做,你就不会用这种模糊的语言提问。你为什么不用godbolt?
如果您仍想在可公开访问的Web服务器上编译和运行任意C代码,您首先应该考虑避免使用vulnerabilities(如果某个不同大陆的坏人上传了恶意C代码并运行它,您不想进入监狱在你的服务器上,当你发生这种情况时,你可能会负有责任并且负法律责任。阅读有关containerization的信息,请注意大多数解决方案(难以理解)都高于Linux(因此您需要先学习Linux)
您也可以考虑将C代码转换为Webassembly(或者可能是Javascript)并在用户的浏览器上运行结果。这并不容易,但可以减轻Web服务器上的风险(因为C代码将在客户端浏览器中运行)。
如果你只是想开发一个内部站点(只能在你信任的人的某个内部网上访问),你可以考虑使用PHP的popen函数(运行一些gcc.exe
命令,或者运行yourprog.exe
,并处理它的输出)。 PHP函数的灵感来自POSIX popen(3)(你可以找到大量的例子和解释)。
您可能缺乏有关操作系统的基本知识。你可以阅读Operating Systems: Three Easy Pieces来获取它们。一定要了解更多HTTP协议和HTML5及相关技术(AJAX,Websockets等...)。你也可能缺乏对它们的了解!
我也倾向于认为Linux(在大多数Web服务器上使用,BTW)对你的目标比Windows更友好。但是你的目标比你所相信的更加雄心勃勃和困难。
答案很简单:如果你想用inputs.txt中的输入运行一个test.exe文件并从output.txt中保存你的输出,那么从cmd开始你只需写一下。 test.exe <inputs.txt> output.txt