【问题标题】:make my own shell - C - chdir()制作我自己的外壳 - C - chdir()
【发布时间】:2015-01-14 11:44:05
【问题描述】:

我尝试用 C 编写自己的 shell。chdir() 函数有问题。 有时我会收到一条错误消息,上面写着execvp: No such file or Directory,而其他一些则什么也没有。目录始终相同。我正在尝试到达一个存在的目的地。

if(strcmp(str,"exit\n")!=0){

    history_vector[i]=strdup(str);

    if(strcmp(str,"cd\n")==0){
        char *dir  = strtok(str," ");
        dir = strtok(NULL," ");
        if(chdir(dir) == -1) {
            perror("Cannot change directory"); 
        }   
        else {
            printf("Changing Directory .....\n"); 
        }
   }

【问题讨论】:

  • 在调用chdir 之前,您是否检查了该指针中放置的内容。
  • 你试过调试你的程序吗? str 的值是多少? dir 的值是多少?你得到什么错误?
  • 哦,如果cd 有参数,那么您需要比较的输入字符串是not "cd\n"。如果您只是使用调试器,或者只是打印出str 的内容,您应该很快就能找到的东西。

标签: c linux shell chdir


【解决方案1】:

如果你期望有一个参数,字符串比较永远不会成功。

您与strcmp() 一起使用的字符串"cd\n" 不包含参数,因此如果str 更长,它将不匹配。

【讨论】:

  • 如果你无法理解这里发生了什么,也许你想推迟编写一个复杂的 shell 应用程序,直到你的技能有所提高。你的字符串要么有一个额外的词,要么没有。没有其他可能性。这不是什么大谜。如果不是,则此处没有其他要提取的单词。如果是这样,你的 strcmp() 是错误的。
【解决方案2】:

你可以试试

if(strncmp(str,"cd\n",2)==0)

在第 3 行.. 因为你必须忽略空格.. 进入 if !!

【讨论】:

    最近更新 更多