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

问题描述 投票:-3回答:2

我正在创建一个网站(php)来编译.c文件并运行.exe文件,其中包含一些位于文件中的输入。我的操作系统是windows。我正在上传.c文件,然后我执行exec(gcc ...)命令。你能告诉上传文件如何编译的方式(如果是其他更好的方法),运行一些输入并收回结果?

gcc cmd exec
2个回答
0
投票

你可能想在运行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更友好。但是你的目标比你所相信的更加雄心勃勃和困难。


0
投票

答案很简单:如果你想用inputs.txt中的输入运行一个test.exe文件并从output.txt中保存你的输出,那么从cmd开始你只需写一下。 test.exe <inputs.txt> output.txt

© www.soinside.com 2019 - 2024. All rights reserved.