chdir(..) 成功返回 0 并更改目录,但输出 "No such file or directory"

标签 c string pointers cd chdir

我正在一个 C 程序中使用系统调用来实现 cd 功能,该程序充当一个简单的 shell,并且我在目录名称方面遇到了一些问题。我感觉它与字符串有关,但到目前为止我还没有运气。

我有一个类似下面的函数:

static void parse_args(int argc, char **argv) {

    // Special conditions:
    if (strcmp(argv[1], "return") == 0) {
        exit(0);
    }
    else if (strcmp(argv[1], "cd") == 0) {

        if (strcmp(argv[2], "mydir") == 0) {
            printf("Directory name is 'mydir'!\n");
        } else {
            printf("Directory name is NOT 'mydir'!\n");
        }

        int ret = chdir(argv[2]);
        if (ret == 0) { // success
            printf("Able to change directory.\n");
        } else {
            printf("UNABLE to change directory.\n");
        }
    }

    // Handling piping for shell ....
}

我预先知道 argv[2] 是一个包含我想要的新目录的字符串。

我希望cd 到一个名为mydir 的现有目录,然后用argv[2] 调用changeDirectory等于 "mydir"。但是,如您所见,在 changeDirectory 中,我验证了 argv[2] 实际上完全等于“mydir”。

我的简单 shell 调用的结果是:

$> pwd
/foo/bar
$> cd mydir
Directory name is 'mydir'!
UNABLE to change directory.
/usr/bin/cd: line 4: cd: mydir: No such file or directory
$> pwd
/foo/bar/mydir

看起来命令成功了,但我不知道为什么会收到错误消息。 有趣的是,如果我调用 int ret = chdir("mydir");,则不会出现此错误消息 我能以某种方式转换/清理这个参数吗?任何指针将不胜感激。我可以散吗

最佳答案

原来是改目录后忘记退出函数了。在该函数的后面,我将 cd 作为参数传递给 execvp 以将其作为程序执行。只需将后面的“Handle Piping”代码封装在 else 中即可解决此问题。

关于chdir(..) 成功返回 0 并更改目录,但输出 "No such file or directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197708/

相关文章:

c - scanf 的多种输入格式

c - 关于 `size_t`和它们测量的指针类型

c - 将BMP图像放入2D数组并在C中编辑RGB值

c - 如何防止 scanf() 自动将剩余数字插入下一个数组?

c - 使用C替换文件中的字符串

javascript - 理解 sort() 一贯的错误行为

c++ - 使用 malloc 与 new

C++ C 风格将指针转换为指针

将输入字符串中的单词 "welcome"更改为大写

c - 试图从 "the art of exploitation"理解示例 char_array2.c