Memory fork变量随机变化
我想使用execvp在我的程序中运行命令。提示用户输入命令(在eof上退出) 一旦程序有了一个命令,它就会在父进程等待子进程完成的同时,派生一个子进程来处理该命令 我正在标记输入,以将其存储在char*数组中,该数组由变量'I'跟踪。 除了“i”在while循环的每次迭代中都不断更改其值 样本输入:/bin/ls-lMemory fork变量随机变化,memory,fork,Memory,Fork,我想使用execvp在我的程序中运行命令。提示用户输入命令(在eof上退出) 一旦程序有了一个命令,它就会在父进程等待子进程完成的同时,派生一个子进程来处理该命令 我正在标记输入,以将其存储在char*数组中,该数组由变量'I'跟踪。 除了“i”在while循环的每次迭代中都不断更改其值 样本输入:/bin/ls-l #include <stdio.h> #include <sys/types.h> #include <sys/wait.h&
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#define BUFFER 1024
int main(){
pid_t p;
char* paramList[] = {};
char input[BUFFER];
int i = 0;
char* segments;
printf(">");
while(fgets(input, BUFFER, stdin) != NULL){
if((p = fork()) == 0){
printf("Executing: %s\n", input);
i = 0;
segments = strtok(input, " ");
paramList[i] = segments;
printf("%s%d\n", paramList[i], i);
i++;
while(segments != NULL){
segments = strtok(NULL, " ");
paramList[i] = segments;
printf("%s%d\n", segments, i);
i++;
}
paramList[i] = NULL;
execvp(paramList[0], paramList);
}else{
printf(">");
waitpid(p, NULL, 0);
}
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
#定义缓冲区1024
int main(){
pid_t p;
char*paramList[]={};
字符输入[缓冲区];
int i=0;
字符*段;
printf(“>”);
while(fgets(输入、缓冲区、标准输入)!=NULL){
如果((p=fork())==0){
printf(“正在执行:%s\n”,输入);
i=0;
段=strtok(输入“”);
参数列表[i]=段;
printf(“%s%d\n”,参数列表[i],i);
i++;
while(段!=NULL){
段=strtok(空,“”);
参数列表[i]=段;
printf(“%s%d\n”,段,i);
i++;
}
paramList[i]=NULL;
execvp(paramList[0],paramList);
}否则{
printf(“>”);
waitpid(p,NULL,0);
}
}
返回0;
}
您没有为参数列表
声明大小,而是为其提供了一个空的初始值设定项列表;因此,paramList
具有零元素。然后你在其中写入了超过零的元素,溢出到其他局部变量上(如i
)。你能更准确地说明你的程序到底出了什么问题吗?好的,这解决了我使用“i”变量时遇到的问题。paramList现在是一个由10个元素组成的数组,但是当我将我的令牌分配给该列表时,它就不起作用了。如果我在参数列表中硬编码“/bin/ls”、“-l”,它可以正常工作。