在C中制作一个shell,但是无法让chdir工作?

时间:2015-12-15 07:25:38

标签: c linux shell command-line command

我在C中编写一个shell,它应该实现几个命令,其中一个命令是更改目录命令。要更改目录,我使用chdir(),但每次运行我的代码时,都会出现分段错误(核心转储)错误。 这是我的代码:

.....
........
char *shell;
while((shell=readline("shell> ") )){
char *cmd = strtok(shell," ");

if(strcmp(cmd,"ls")==0)
 {
    //do something
 }
 else if(strcmp(cmd,"print")==0)
 {
   //do something
 }
else if(strcmp(cmd,"cd")==0){

            char *directory = strtok(NULL," ");

            if(chdir(directory)==-1){
                printf("Error\n");
            }
            else
            {
                printf("changed directories!");
            }


        }
      add_history(shell);
 }

我想我可能会错误地使用strtok?

感谢任何帮助,谢谢:)

1 个答案:

答案 0 :(得分:1)

这个

    char *directory = strtok(cmd," ");

应该是

        char *directory = strtok(NULL," ");

当您致电strtok()获取下一个令牌时,您会将NULL传递给它。

此外,strtok()不可重入。因此,即使您的计划要标记不同的字符串,也无法使用它。您可以在POSIX系统上使用strtok_r()