我正在编写一个程序,要求用户提供一个linux bash命令,然后将它们存储在指针数组中(类似于char *argv[])。然后,程序必须检查该命令是普通bash命令还是cd (change directory)命令。如果是cd命令,则应该使用类似chdir()的命令。如果该命令是其他命令,我想使用exec()系统调用的一些变体来执行该命令。
然而,我没有成功的第一部分(chdir())。

int ii=-1
printf("Enter the command: ");
fgets(command, 100, stdin);
command[strlen(command)-1]=0;
printf("Command = %s\n", command);


if (command[0]=='c' && command[1]=='d' && command[2]==' ')
{
    printf("I am inside CD now.\n");
    cd_dump[0] = strtok(command," ");
    while(sub_string[++ii]=strtok(NULL, " ") != NULL)
    {
        printf("%s\n", sub_string[0]);
    }

    chdir(sub_string[0]);
}

编辑:
我也试过下面的if语句。
if (command[0]=='c' && command[1]=='d' && command[2]==' ')
{
    printf("I am inside CD now.\n");
    chdir(command+3);
}

不幸的是,这个程序并没有按我的意愿去做,即使在几个小时后试图解决这个问题,我也不知道为什么。我做错了什么?另外,如果我输入cd /home/为什么输出结果为sub_string[0]最后在输出上有一个额外的“回车键”?strtok是否将Enter键保存到字符串中?
关于这个问题的任何帮助都非常感谢。

最佳答案

调用chdir()只影响当前进程,而不影响其父进程。
如果你chdir()并立即退出,那是毫无意义的——你调用它的shell保留它的旧CWD。这就是为什么cd总是一个shell内置的原因。
使用

char buffer[PATH_MAX];
if (getcwd(buffer, sizeof buffer) >= 0) {
    printf("Old wd: %s\n", buffer);
}
chdir(command+3);
if (getcwd(buffer, sizeof buffer) >= 0) {
    printf("New wd: %s\n", buffer);
}

验证chdir()是否正常工作。

关于c - 我的chdir()函数无法正常工作。为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21473210/

10-11 15:42