【发布时间】:2014-10-04 22:13:00
【问题描述】:
我正在使用充当简单外壳的 C 程序中的系统调用来实现 cd 功能,并且在目录名称方面存在一些问题。我觉得它与字符串无关,但到目前为止我还没有运气。
我有如下函数:
static void parse_args(int argc, char **argv) {
// Special conditions:
if (strcmp(argv[1], "return") == 0) {
exit(0);
}
else if (strcmp(argv[1], "cd") == 0) {
if (strcmp(argv[2], "mydir") == 0) {
printf("Directory name is 'mydir'!\n");
} else {
printf("Directory name is NOT 'mydir'!\n");
}
int ret = chdir(argv[2]);
if (ret == 0) { // success
printf("Able to change directory.\n");
} else {
printf("UNABLE to change directory.\n");
}
}
// Handling piping for shell ....
}
我预先知道argv[2] 是一个包含我想要的新目录的字符串。
我希望cd 进入一个名为mydir 的现有目录,并调用changeDirectory,argv[2] 等于"mydir"。但是,如您所见,在changeDirectory 内部,我验证argv[2] 实际上完全等于“mydir”。
我的简单shell调用的结果是:
$> pwd
/foo/bar
$> cd mydir
Directory name is 'mydir'!
UNABLE to change directory.
/usr/bin/cd: line 4: cd: mydir: No such file or directory
$> pwd
/foo/bar/mydir
所以看起来命令成功了,但是我不知道为什么我会收到错误消息。
有趣的是,如果我调用int ret = chdir("mydir");,则不会出现此错误消息
我可以以某种方式强制/清理此参数吗?任何指针将不胜感激。我可以散吗
【问题讨论】:
-
您显示的代码与输出不匹配,请显示实际代码。而且您没有在其他地方打印错误消息?
-
已经看过这个问题或非常非常相似的东西。
chdir不调用外部/usr/bin/cd。在代码中找到调用它的位置并修复它。 -
什么是
/usr/bin/cd?一些系统确实有这样的命令,但它几乎没有意义——而且你向我们展示的代码并没有调用它。 -
啊,换目录后忘记退出功能了。因此,我试图稍后以
cd作为参数执行execvp..
标签: c string pointers cd chdir