在C中创建Shell的困境

时间:2014-10-09 03:31:08

标签: c

我一直在努力实现基本shell。我理解基本概念,并且我已经接收到了一个seg-fault。我基本上需要通过执行以下方式来实现shell:

  1. 提示
  2. 解析输入
  3. 创建argv []
  4. 叉 孩子 - > execvp() 父母 - >等待/ waitpid函数()
  5. 我的代码列在下面,我不能为我的生活弄清楚我做错了什么我看了很多其他的地方。我最初的想法是它与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);
    }
    

1 个答案:

答案 0 :(得分:1)

请注意p是指向char的指针数组。它是未初始化的,意味着每个条目p[n](即p的20个元素中的每一个,其中0 <= n <20)是垃圾。然而,你要做的第一件事就是测试它的一个项目是NULL。这是崩溃的。另外,您尚未初始化numofargs,那么您访问的是p的哪个元素?谁知道。那也是崩溃。首先要解决这些问题。