cd
命令有问题。其他所有内容似乎都可以正常工作,例如编译和运行程序以及ls
。我运行ls
,ls -1
并正常工作。当我运行cd
或cd Desktop
时,什么也没发生。
我正在创建一个fork,然后执行一个过程。我以exit
退出或按 CTRL + D 。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define SIZE 255
void printPrompt(){
printf("\nuser@shell > "); //print prompt
}
void readPrompt(char string[],int *check){ //read prompt line from user
if( (scanf(" %[^\n]",string)==EOF) ){
//printf("\nTEST\n");
*check=0;
}
printf("\n");
}
void RunSimple(char line[]){ //creating a fork and running a program with exe fuction.
char **args=malloc(8 * sizeof(char *));
char *parsed;
int i=0,pid;
parsed = strtok(line," ");
while (parsed != NULL) {
args[i] = parsed;
i++;
parsed = strtok(NULL," ");
}
pid = fork();
if(pid == 0){
execvp (args[0],args);
}
waitpid(pid,NULL,0);
}
int main(int argc, char **argv){
char line[SIZE];
int check=1;
while(1){
printPrompt();
readPrompt(line,&check);
if( (!strcmp(line,"exit")) || (check==0) ){
break;
}
RunSimple(line);
}
}
谢谢。
答案 0 :(得分:1)
cd
必须作为内置函数实现,因为当前工作目录是该进程的属性。因此,您的cd
命令必须更改外壳程序的状态,这是子进程无法完成的。还有其他一些事情,例如环境变量的处理,必须要这样处理。