我正在编写一个程序,要求用户提供一个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/