构造一个自己的 mini 操作系统
任务描述
请实现如下功能: 1.写一个命令解释器程序 mysh.c
,其功能是接收用户输入的命令并给出反馈。要求该程序既支持内部命令 cd、sync、exit
;也支持外部命令,即可以接收 cat、ls
等命令,然后执行相应的可执行程序。要求首先在 Ubuntu 中测试该程序,然后用版本 0 内核启动 bochs 虚拟机,在该虚拟机中编译运行该程序,画面应如下图所示:
2.在 bochs 虚拟机的 /etc/rc
文件中增加一组测试命令,如下图所示:
相关知识
为了完成本关任务,你需要掌握: 1.命令解释器程序的一般结构是怎样的; 2.如何获取当前目录的路径名; 3.如何实现内部命令 cd 和 sync ; 4.如何执行一个可执行文件; 5.如何将文件放入 bochs 虚拟机; 6.在 bochs 虚拟机中如何编辑文件。
实验准备
mysh.c
存放在/data/workspace/myshixun/exp3
中,修改之后请将文件保存在同一位置,否则评测无法通过。
实验过程及答案
实验过程
先通过vscode编辑mysh.c
#include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<string.h> void main() {int size = 20;int pid;char pos[size];char command[size];while(1){getcwd(pos,size);printf("%s$\n",pos);scanf("%s",command);if(!strcmp(command,"cd")){char path[size];scanf("%s",path);chdir(path);}else if(!strcmp(command,"sync")){sync();}else if(!strcmp(command,"exit")){exit(0);}else if(!strcmp(command,"ls")){char ls_command[size];strcpy(ls_command,"ls ");strcat(ls_command,pos);// sprinf(ls_command,"ls %s", pos);system("ls");}else if(!strcmp(command,"cat")){char filename[size];char cat_command[size];scanf("%s",filename);strcpy(cat_command,"cat ");if(filename[0] != '/'){strcat(cat_command,pos);strcat(cat_command,"/");}strcat(cat_command,filename);// sprintf(cat_command,"cat %s/%s",pos, filename);system(cat_command);}} }
把这份代码保存到os/linux-0.11-lab/b下
代码搞定,把这段代码放进内核编译