c语言 - 我的 chdir() 函数将不起作用.为什么?



我正在编写一个程序,要求用户输入 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 = %sn", 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("%sn", 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]最终在输出上有一个额外的"Enter键"?strtok 是否将 Enter 键保存到字符串中?

非常感谢有关该主题的任何帮助。

调用chdir()只会影响当前进程,而不会影响其父进程。

如果您chdir()并立即退出,那是没有意义的 - 您调用它的外壳会保留其旧的 cwd。这就是为什么cd始终是内置的外壳。

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

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

我想我会做这样的事情:

if (command[0]=='c' && command[1]=='d' && command[2]==' ')
{
for(i=2, i++, command[i]!=' ');  /* Skip to nonspace */
chdir(command+i);
}

相关内容

  • 没有找到相关文章

最新更新