【问题标题】:C — using chdir() functionC — 使用 chdir() 函数
【发布时间】:2013-05-04 17:12:31
【问题描述】:

我正在尝试使用chdir() 函数,但无法解决。

我正在阅读用户的信息,看看他是否在使用“cd”。 我总是得到一个错误。 我做错了什么?

代码:

    int * status=0;
    char * buf = 0;
    char arguments[2048];
    buf = getcwd(buf,PATH_MAX);
    printf("%s >",buf);

    fgets(arguments,2048,stdin);

    if( strncmp(arguments,"quit",4)==0 ){
      printf("Exit...\n");
      break;
    }
    else if(strncmp(arguments,"cd",2)==0 ){
        int ret;
        printf("\nGOT = %s\n",(arguments+2));
        ret = chdir ((arguments+2));
        if(ret!=0){
          perror("Error:");
        }
    }

【问题讨论】:

  • ...那个错误究竟是什么?
  • GOT = /home 错误:: 没有这样的文件或目录
  • 这将是输入末尾的换行符,请参阅我的答案。
  • 顺便说一句,您可以使用stracegdb 来调试您的问题。这比在这里问要快......
  • 研究一些像sash这样的小免费软件shell的源码

标签: c linux cmd console chdir


【解决方案1】:

如果输入的行是这样的:

cd xyzzy

然后目录从偏移量 3 开始,而不是 2。此外,fgets 通常会在最后给您一个换行符的行,因此您也需要删除它,例如:

if (strlen (line) > 0)
    if (line[strlen (line) - 1] == '\n')
        line[strlen (line) - 1] = '\0';

您可能应该更智能地对输入进行标记,例如bash(例如)这样的 shell 具有相当复杂的规则。

【讨论】:

  • 感谢它刚刚添加的参数[strlen(arguments)-1] = '\0';
【解决方案2】:

"cd" 后面可能有空格,所以应该加 3 而不是 2。

    printf("\nGOT = %s\n",(arguments+3));
    ret = chdir ((arguments+3));

【讨论】:

  • 是的,我试过了,我得到了:“ GOT = /home Error:: No such file or directory
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多