-1

构建一个像 prog 这样的小外壳

我尝试制作 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 ..”命令

4

1 回答 1

7

您正在将实际字符串传递"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在 aprintf错误之后(因为 a failedprintf会改变errno)。

因此,您应该使用fprintf上述内容。

于 2015-11-15T16:13:57.260 回答