Linux中的C Shell:chdir()表现奇怪

时间:2014-09-30 16:10:09

标签: c linux shell

首先,这是我的操作系统类的作业。

所以,我在Linux中用C编写自己的shell。部分要求是使用chdir()实现cd命令。

这是我的代码段:

/**
 * The way I parse the user input, argv is a char array which contains
 * the command call and each additional argument is contained in succeeding
 * indices in argv. E.g. 'ls -al' is contained as argv = [ ls | -al ] or
 * 'ssh webserver@server.com -l username' is contained as
 * argv = [ ssh | webserver@server.com | -l | username ]
 */

/* Handle cd */
if (strcmp(argv[0], "cd") == 0){
    struct passwd *pwd;
    char *path = argv[1];

    if(path == NULL){
       pwd = getpwuid(getuid());
       path = pwd->pw_dir;
    }
    /* errno is a previously declared int */
    errno = chdir(path);

    if(errno != 0)
        printf( "Error changing directory!\nError #: %d\nError Descriptor: %s\n", errno, strerror( errno ) );
}

发生了什么,当我在我的shell中并且我进入一个目录(例如cd / root / Public /)时,我成功地切换到目录,chdir()也返回0表示成功,但是,cd抛出以下错误:

/usr/bin/cd: line 2: cd: /root/Public/: No such file or directory

这让我感到困惑,因为chdir()成功了,当我输入pwd时,我在/ root / Public /

1 个答案:

答案 0 :(得分:1)

感谢Etan Reisner,我找到了问题的原因。

问题是我在chdir()调用和错误处理之后没有释放该行。所以我想发布chdir()它是拿起某种垃圾还是什么?无论如何,释放这条线解决了这个问题。

另外,感谢Andrew Medico,我按照你的建议进行了修改:)