2013-05-04 113 views
1

我试图使用chdir()函数,但无法实现它。C - 使用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:"); 
     } 
    } 
+3

...那个错误会是什么,到底是什么? – paxdiablo 2013-05-04 17:17:42

+0

GOT =/home 错误::没有这样的文件或目录 – 2013-05-04 17:24:11

+0

这将是输入结尾的换行符,请参阅我的答案。 – paxdiablo 2013-05-04 17:26:58

回答

4

是一样的东西:

cd xyzzy 

然后该目录开始在偏移量3,而不是2.另外,fgets usu盟友给你,并在最后一个换行符行,所以你想要删除为好,如:

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

或许你也应该多一点智能tokenising输入,就像bash壳(例如)具有相当复杂的规则。

+0

由于它的工作 刚刚添加 参数[strlen的(参数)-1] =' \ 0' ; – 2013-05-04 17:53:24

1

有可能是"cd"后空格字符,因此,如果正在进入的线,你应该加3不2

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

是的,我试过,我得到: “ GOT = /家 错误::没有这样的文件或目录 – 2013-05-04 17:22:46