我正在练习制造一个外壳,但我正在为一个问题而挣扎。除了"cd“之外,几乎所有命令都工作得很好。我搞不懂为什么会发生这种事。
这是我的代码:
int main(int argk, char *argv[], char *envp[])
{
int frkRtnVal;
char *v[NV];
char *sep = " \t\n";
int i;
while (1)
{
fgets(line, NL, stdin);
fflush(stdin);
if (feof(stdin))
{
fprintf(stderr, "EOF pid %d feof %d ferror %d\n", getpid(), feof(stdin), ferror(stdin));
exit(0);
}
if (line[0] == '#' || line[0] == '\n' || line[0] == '\000')
{
continue;
}
v[0] = strtok(line, sep);
for (i = 1; i < NV; i++)
{
v[i] = strtok(NULL, sep);
if (v[i] == NULL)
{
break;
}
}
frkRtnVal = fork();
switch (frkRtnVal)
{
case -1:
{
break;
}
case 0:
{
execvp(v[0], v);
}
default:
{
wait(0);
break;
}
}
}
}发布于 2016-08-20 02:33:20
在子进程中更改工作目录似乎不会影响父进程,因此它的效果不会停留在shell中。您必须在shell中解析它,并将其作为一个特殊命令来处理。
https://stackoverflow.com/questions/39049898
复制相似问题