【问题标题】:chdir() in C++ Getting ErrorsC++ 中的 chdir() 获取错误
【发布时间】:2013-08-07 18:17:31
【问题描述】:

我正在尝试通过 unix 机器上的套接字运行一个最小的终端 shell 程序。当我使用system("cd directory") 时,它不起作用。所以我做了一些研究,发现了chdir(),看起来它可以工作。但是,当我尝试它时,它每次都给我错误。这是我的代码:

if (chdir(argument) < 0) {
     send(sock, "[*] Directory does not exits!\n", strlen("[*] Directory does not exits!\n"), 0);
}
else {
    string argumentString(argument);
    string entireMessage = "[*] New working directory: " + argumentString;
    char entireMessageChar[64];
    int i;
    for (i = 0; entireMessage[i] != '\0'; i++) {
        entireMessageChar[i] = entireMessage[i];
    }
    send(sock, &entireMessage, strlen(entireMessageChar), 0);
}

谁能告诉我为什么chdir() 不改变目录? 谢谢。

【问题讨论】:

  • 如果不知道确切 chdir() 的返回码是什么,就无法判断。你不能在检查它是否为非零之后就扔掉它,所以现在,这个问题没有包含足够的信息来提供有用的答案。
  • 好的,等一下,我会得到代码的。
  • 顺便说一句——system("cd directory") 不起作用的原因是system() 启动了一个shell; shell 切换到新目录,然后 shell 退出。您启动了更改其目录的子进程并不意味着 您的 目录更改。
  • @CharlesDuffy 感谢您提供的信息
  • -1 可能源于在提出问题之前没有充分研究问题。 chdir() 有文档,我们绝对没有告诉您其中没有任何内容。如果您已经证明自己做出了合理的努力来调试问题,那么事情可能会更受欢迎。 (没有将代码修剪到最低限度,显示您的确切输入等也有贡献)。

标签: c++ cd chdir


【解决方案1】:

需要检查chdir()退出后errno的值,以确定它为什么不起作用。

可能的退出状态值包括:

  • EACCESS(目标没有权限)
  • ENOENT(文件不存在)
  • ENOTDIR(目标是文件,而不是目录)。

查看您的操作系统实现的文档以获取完整列表。

【讨论】:

  • 假设符合 POSIX 标准的chdir,成功时返回 0,失败时返回 -1。如果失败,它会将errno 设置为这些值之一。并且您应该在调用之前将errno 设置为0。
  • @KeithThompson 非常正确。这就是我在其他地方十年后试图回答 C 问题的结果......
  • 对不起,如果我的 cmets 让任何人感到困惑。 Errno 返回 2
  • @InsertNameHere 2 将是 ENOENT - 所以你要求它 cd 到一个不存在的目录。
  • 但是如果我执行 cd ..,它就不起作用了,这应该把我带到我的父目录。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
相关资源
最近更新 更多