C++ C+中的chdir()+;出错

C++ C+中的chdir()+;出错,c++,cd,chdir,C++,Cd,Chdir,我试图通过unix机器上的套接字运行一个最小的终端shell程序。当我使用系统(“cd目录”)时,它不工作。所以我做了一些研究,发现了chdir(),看起来它会起作用。但是,当我尝试时,每次都会出错。这是我的密码: if (chdir(argument) < 0) { send(sock, "[*] Directory does not exits!\n", strlen("[*] Directory does not exits!\n"), 0); } else { s

我试图通过unix机器上的套接字运行一个最小的终端shell程序。当我使用
系统(“cd目录”)
时,它不工作。所以我做了一些研究,发现了
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);
}
if(chdir(参数)<0){
发送(sock,“[*]目录不存在!\n”,strlen(“[*]目录不存在!\n”),0);
}
否则{
字符串参数字符串(参数);
string entireMessage=“[*]新工作目录:”+argumentString;
char entireMessageChar[64];
int i;
对于(i=0;entireMessage[i]!='\0';i++){
entireMessageChar[i]=entireMessage[i];
}
发送(sock,&entireMessage,strlen(entireMessageChar),0);
}
有人能告诉我为什么
chdir()
没有更改目录吗?
谢谢。

需要检查
chdir()
退出后
errno
的值,以确定其不起作用的原因

可能的退出状态值包括:

  • EACCESS(对目标没有权限)
  • eNote(文件不存在)
  • ENOTDIR(目标是一个文件,而不是一个目录)

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

如果不确切知道
chdir()的返回代码是什么,就无法判断。你不能在检查它是否为非零后就把它扔掉,所以现在,这个问题没有包含足够的信息来提供有用的答案。好的,等等,我会得到代码。顺便说一下-
system(“cd目录”)
不起作用的原因是
system()
启动了一个shell;shell更改为新目录,然后shell退出。您启动的子进程更改了其目录并不意味着您的目录发生了更改。@CharlesDuffy感谢您提供的信息-1可能是因为在提出问题之前没有充分研究这个问题
chdir()
有文档,我们绝对没有告诉您在其中找不到任何东西。如果您有证据表明自己已经做出了合理的努力来调试这个问题,那么您可能会收到更好的效果。(不将代码裁剪到所需的最小值,显示您的精确输入等。也有助于)。假设符合POSIX的
chdir
,则成功时返回0,失败时返回-1。如果失败,它会将
errno
设置为这些值之一。在调用之前,您应该将
errno
设置为0。@KeithThompson说得很对。这就是我在其他地方十年后试图回答C类问题所得到的结果……如果我的评论让任何人感到困惑,我很抱歉。无回报2@InsertNameHere2将是eNONT--所以您要求它将cd刻录到一个不存在的目录中。但如果我使用cd..,它将不起作用,这将使我转到父目录。对吗?