#include <stdio.h>
#include <sys/types.h>
#include <string.h>
int main()
{
char *ip;
char *temp[10];
pid_t pid;
pid = fork();
if (pid == 0) {
int i = 0;
do {
gets(ip);
temp[0] = strtok(ip, " ");
while (temp[++i] != NULL) {
temp[i] = strtok(NULL," ");
}
pid_t pid2;
pid2 = fork();
if (pid2 == 0) {
execvp(temp[0], temp);
}
} while(strcmp(temp[0], "quit"));
if (!strcmp(temp[0],"quit")) {
return;
}
} else if (pid < 0) {
fprintf(stderr,"error in creating child");
} else if (pid > 0) {
wait(NULL);
}
}
这段代码似乎无法使用cd命令。我是否可以修复它?我对操作系统的概念相当新,任何帮助都将不胜感激! :)
答案 0 :(得分:11)
cd
不作为可执行命令存在。 (并且它不能,因为进程只能更改其自身的工作目录,而不能更改其父级。)您需要使用cd
系统调用自己实现chdir()
作为内置,类似于您已经实施quit
的方式。
如果你计划实现它们,你需要实现内置的其他命令,包括(例如,我不是要彻底):
pushd
和popd
exit
,logout
,bye
等fg
,bg
,jobs
和&
后缀history
set
,unset,
export