我一直在努力实现基本shell。我理解基本概念,并且我已经接收到了一个seg-fault。我基本上需要通过执行以下方式来实现shell:
我的代码列在下面,我不能为我的生活弄清楚我做错了什么我看了很多其他的地方。我最初的想法是它与strtok()有关,但我无法确定它。
int main(int argc, char *argv[])
{
pid_t pid;
char input[100];
char* p[20];
int numofargs;
char* s;
while(1){
printf("SimpleShell");
fgets(input, 100, stdin);
s = strtok(input, " ");
while(p[numofargs] != NULL){
p[numofargs] = strtok (NULL, " ");
numofargs++;
}
pid = fork();
if (pid == 0){
execvp(p[0],p);
perror("exec failure ");
}
else
waitpid();
}
exit(0);
}
答案 0 :(得分:1)
请注意p
是指向char
的指针数组。它是未初始化的,意味着每个条目p[n]
(即p
的20个元素中的每一个,其中0 <= n <20)是垃圾。然而,你要做的第一件事就是测试它的一个项目是NULL
。这是崩溃的。另外,您尚未初始化numofargs
,那么您访问的是p
的哪个元素?谁知道。那也是崩溃。首先要解决这些问题。