【发布时间】:2014-01-31 05:40:05
【问题描述】:
我正在编写一个程序,它要求用户输入一个 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] 中的输出结果会在输出中出现额外的“Enter 键”? strtok 是否将 Enter 键保存到字符串中?
非常感谢您对此主题的任何帮助。
【问题讨论】:
-
你确定要
command[3]吗? (前面是0和1) -
ii的初始值是多少?除非是-1,否则前置增量意味着sub_string[0]不包含目录名。 -
我发现 c 中的输入是我在教育中遇到的最复杂的事情之一。当您不知道输入字符串有多长时,有没有办法摆脱 fgets 中的 EOL?或者是否有更好的系统调用来实现这个目的?
-
@Jonathan Leffler:
ii是-1。我将编辑最初的帖子以澄清这一点。