【发布时间】:2011-10-18 17:27:51
【问题描述】:
我的目标是编写一个类似于 Linux 基本 shell 的 C 程序。除了更改工作目录外,我一切正常。我已经尝试使用system() 输入cd 的字符串,但什么也没发生。我也试过chdir("tokened string"),也没有运气。谁有想法?这是我的代码的一部分:
fgets(cmdStr, sizeof(cmdStr), stdin);
if( strncmp("quit", cmdStr, 4) == 0 || strncmp("Quit", cmdStr, 4) == 0 )
{
break;
}
else if( strncmp("cd", cmdStr, 2) == 0 )
{
char *token = strtok(cmdStr, " ");
token = strtok(NULL, " ");
chdir(token);
}
else
{
system(cmdStr);
}
}
可以这样做吗?或者这是与子外壳无法执行某些操作有关的简单案例?
编辑:上面的代码是完整的。
【问题讨论】:
-
chdir是正确的。它的返回值是多少?如果-1,什么是errno? (始终检查系统调用的返回值。) -
@Nemo 无论字符串是什么,返回值都是-1。用不同的字符串尝试了多次。不确定如何检查它与 -1 一起产生的错误。有什么建议吗?
-
我会注意到你使用
strncmp的方式意味着cdxxx foo等同于cd foo。对于更通用的功能,首先将字符串解析为标记,然后检查第一个标记是否为"cd"。 (这个问题是 5 年前的问题,所以这可能不相关,但未来的读者可能会感兴趣。)