【发布时间】:2013-10-15 18:50:21
【问题描述】:
我是另一个 CS 初学者,正在研究一个简单的 Shell。目前,如果传递了参数,我正在尝试更改当前目录,否则,报告到当前目录。
我尝试在我的程序中使用chdir(),但它显然不起作用。我尝试传递一个标记化的char* 参数。我也尝试了argv[1],但我一定做错了什么,因为两者似乎都不起作用。
另外,我不确定如何使参数指针(包含目录字符串)静态化,这样当我使用 putenv(ARGUMENT HERE) 时就没有问题了。
这是我的代码的相关部分:
else if (strncmp(command[0], "cd", 2) == 0)
{
char *argmnts = strtok(0, " ");
if (arguments != NULL)
{
chdir(argmnts);
putenv(argmnts); // THE ARG STRING NEEDS TO BE A STATIC COPY
getcwd(promptBuff, sizeof(argmnts));
}
}
指针 argmnts 指向标记化参数部分来自:char strnBuffer[1000],它已经为命令标记化:command[0] = strtok(strnBuffer, " ");
我非常感谢任何帮助/见解。
谢谢。
【问题讨论】:
-
sizeof(argmnts) 将是 4。可能不是你想要的。也许是 sizeof(promptBuff)。
-
chdir() 需要一个路径,putenv() 需要一个格式为 name=value 的字符串。
-
不止一个问题read
-
chdir()、putenv() 和 getcwd() 都返回值,表明它们是否成功。你忽略了他们所有人。不好的编程习惯。
-
我把所有使用返回值的行都取出来检查错误,我只是想专注于找出核心问题。但是我一直在使用它们,这就是我知道 chdir() 无法正常工作的方式。它返回 -1 :-/