c 中 chdir 的奇怪错误

Strange bug with chdir in c

构建一个像 prog

一样的小 shell

我尝试制作 cd 命令,所以我使用:

if (!strcmp(cmd, "cd") ) 
    {
        if(chdir("args[1]")!=0){
            printf(" %s - path not found\n",args[1]);
            perror("Error:");
        }
    } 

输出是这样的:

smash > cd /home/johnny/workspace/
 /home/johnny/workspace/ - path not found
Error:: No such file or directory
smash > cd test
 test - path not found
Error:: No such file or directory

ps工作目录中有一个"test"文件夹

pps 也许你们可以帮助我如何制作 "cd .." 命令

您正在将实际字符串 "args[1]" 传递到 chdir。这可能不是你想要的,而是你想要的 chdir(args[1]) 所以你的代码看起来像这样:

if (!strcmp(cmd, "cd") ) 
    {
        if(chdir(args[1])!=0){
            fprintf(stderr, "chdir %s failed: %s\n", args[1], strerror(errno));
        }
    } 

printf 的输出来看,您的路径似乎没问题,请注意在 printf 中您没有 "args[1]" 而是 args[1].

@BasileStarynkevitch 在下面的评论中也指出:

perror after a printf is wrong (since a failed printf would change errno).

因此您应该使用上面的 fprintf