如何设置在Linux上
我试图通过使用Linux机器上的gcc我的PHP脚本编译C代码.c文件的编译GCC超时。但是如果C代码包含无限循环,则编译器会陷入困境。如何设置在Linux上
我的PHP脚本是这样的..
shell_exec('gcc input.c -o output 2> compile.txt');
$output=shell_exec('./output');
的 'Input.c中' 文件是这样的..
#include<stdio.h.
void main()
{
while(1)
prinf("This is infinite loop");
}
当我编译PHP代码,它提供了一个
**PHP Fatal error: Out of memory (allocated 403177472) (tried to allocate 804896768 bytes)**
我试过timeout 5s: $ output = shell_exec('./ output');
,但它不工作,但它的工作原理,如果我做的..
int i;
while(1)
{
scanf("%d",&i);
}
..in我Input.c中的文件。我已经找到了很多,但徒劳无功.. 我在做什么错。
第一点是,它不是被卡住的编译器。编译器编译好的代码。在执行过程中,您的代码将进入无限循环。因此,柜面你的第一个代码,它只是不断没有任何停顿或退出和猪的CPU执行所有这些都给出了“被卡住”的感觉的时间。
关于你的第二个代码是如何工作的,这是因为你被暂停用于获取输入。但是,在这种情况下,您又无法为您的程序提供退出。因此,第二个代码与第一个代码相同,但它不会占用CPU。
只有一个,为您解决此问题的方法,即通过修改你的“C”代码,不要有没有任何退出无限循环。
例子:
int i;
while(1)
{
scanf("%d",&i);
if(0 == i)
{
break; //Just an example as to how you can exit from an infinite loop
}
}
Thanx回复@jay .. 我知道无限循环是一个问题,但我想使编译足够好来处理这种类型的代码。 我不是在控制c代码,我想让编译器处理它,这就是为什么当这样的条件满足或者可能是内存分配限制时,我想超时gcc。 – mayurvir 2012-07-13 05:58:19
编译器不能也不检查你的逻辑。在这种情况下,您的代码的逻辑有问题。所以,在这个代码中你可以用gcc做任何事情来纠正这个问题。 – Jay 2012-07-13 06:03:59
有些网站可以让你编译你的代码,任何人都可以发布任何代码。他们将如何处理这种情况。 – mayurvir 2012-07-13 06:09:42
周杰伦解释太多的非常好。它的其余部分是你的第一个程序,不仅进入一个无限循环,但也产生输出的无限量,所有这些尝试在$输出到存储。我会说你很幸运,你没有让你的电脑死机,但是PHP可能为你保存了一个内置的内存限制。
set_time_limit()设置整个脚本的时间限制。此外,问题是当我从linux shell(shell_exec)执行'output'文件时 – mayurvir 2012-07-13 06:26:36
阅读你的问题我看你想做什么,但我不明白为什么。你可能会尝试解释一下,可能有更好的方法来做你想做的事情。不知道你想做什么,很难说你做错了什么。你是否想用php代替makefile? – 2012-07-13 05:44:50
您是否正在寻找超时的PHP解决方案,或者您是否希望c程序退出? – eyalm 2012-07-13 05:45:36
你确定代码中的无限循环会挂起**编译器**吗? – 2012-07-13 05:52:51