最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

实验五 编程实现自己的shell操作系统实验报告

来源:动视网 责编:小OO 时间:2025-10-02 01:03:11
文档

实验五 编程实现自己的shell操作系统实验报告

学年第学期操作系统课程实验报告学院:    专业:班级:         姓名:                    学号:              任课教师:                  摘要shell是一个命令处理器(commandprocessor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命
推荐度:
导读学年第学期操作系统课程实验报告学院:    专业:班级:         姓名:                    学号:              任课教师:                  摘要shell是一个命令处理器(commandprocessor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命
学年第    学期

   操作系统   课程

实 验 报 告

学    院:        

专    业:  

班    级:                 

姓    名:                                

学    号:                     

任课教师:                            

摘要

shell 是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell 于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell 让你在命令行键入命令,经过shell 解释后传送给操作系统(内核)执行。

Shell是一个管理进程和运行进程的程序。有三个主要功能。

(1)运行程序:shell是一个程序启动器。

(2)管理输入和输出:shell将进程的输入和输出连接到一个文件或其他的进程。

(3)编程

关键字:shell;解释器;程序; 

实验日期:2017年 6月 12日

实验题目实验五 编程实现自己的shell 

实验地点
实验目的了解shell的功能和其执行程序的过程,编写自己的shell程序

1.编辑程序psh1.c,编译并执行。

#include

#include

#include

#define maxargs 20

#define arglen 100

int main()

{

char *arglist[maxargs+1];

  int numargs;

  char argbuf[arglen];

  char *makestring();

  numargs=0;

  while(numargs

printf("Arg[%d]?",numargs);

    if(fgets(argbuf,arglen,stdin)&&*argbuf!='\\n')

      arglist[numargs++]=makestring(argbuf);

    else

if(numargs>0) 

arglist[numargs]=0;

            execute(arglist);

            numargs=0;

}

}

}

  return 0;

}

int execute(char *arglist[])

{    

execvp(arglist[0],arglist);

perror("execvp failed");

exit(1);

}

char *makestring(char *buf)

{

char *cp,*malloc();

  buf[strlen(buf)-1]='\\0';

  cp=malloc(strlen(buf)+1);

  if(cp==0)

{

fprintf(stderr,"no memory\\n");

exit(1);

}

strcpy(cp,buf);

return cp;

}

2.编辑程序psh2.c,编译并执行。 

#include

#include

#include

#define maxargs 20

#define arglen 100

int main()

{char *arglist[maxargs+1];

 int numargs;

 char argbuf[arglen];

 char *makestring();

 numargs=0;

while(numargs{ printf("Arg[%d]?",numargs);

  if(fgets(argbuf,arglen,stdin)&&*argbuf!='\\n')

    arglist[numargs++]=makestring(argbuf);

  else

{ if(numargs>0){arglist[numargs]=0;

                  execute(arglist);

                  numargs=0;}}}

 return 0;}

int execute(char *arglist[])

{int pid,exitstatus;

pid=fork();

switch(pid){

case -1:perror("fork failed");

        exit(1);

case 0: execvp(arglist[0],arglist);

        perror("excvp failed");

        exit(1);

default:while(wait(&exitstatus)!=pid);

printf("child exited with status %d,%d\\n",exitstatus>>8,exitstatus&0377);

}}

char *makestring(char *buf)

{char *cp,*malloc();

 buf[strlen(buf)-1]='\\0';

 cp=malloc(strlen(buf)+1);

 if(cp==0){fprintf(stderr,"no memory\\n");

 exit(1);}

strcpy(cp,buf);

return cp;

}

3.测试运行结果

(1)分别执行psh1和psh2,执行过程中,输入ps命令写出两个程序运行的结果。并分析区别和原因。

(2)在执行psh2过程中,输入./psh1和ps命令写程序运行的结果。

结果

(1)

分析:在psh1.c中,构造函数intexecute(){execvp(arglist[0],arglist); ;exit(1);}只执行一次,所以在输入ps后直接自动退出;在psh2.c中,构造函数int execute(char *arglist[]){ switch(){case -1: ; exit(1);case 0: execvp(arglist[0],arglist); exit(1);Default: }}运用switch函数,所以在输入ps后仍继续执行。

 (2)

遇到问题及解决方法1.编译后出现较多warning警告,如图下:

虽编译时出现警告,但是并不影响程序的运行,进而继续执行 。

                                  

                 总结

经过本次实验的学习,知道了可以通过PS命令查看用户空间的进程,可以设置参数:-a:列出所在进程,包括其他终端由其他用户运行的程序。-l:更出各个进程的详细状态。 也知道了shell运行程序的过程:(1)用户键入程序名  a.out(2)Shell建立一个新的进程来运行这个程序;(3)Shell将程序从磁盘载入(4)程序在它的进程中运行直到结束。

在编程过程中要多了解库函数,可以阅读相应的帮助文件来获得有用的信息。shell 语言与其他编程语言相比真正有说服力。Shell 提供把进程和文件连接在一起的强力的记法。在这个角度上,shell 语言非常适合作为 Unix 操作系统的一般性范例。在 Unix 中,基本的计算代理(agent)是程序,它作为在单独的地址空间中的进程而运行。通过在叫做管道的有向字节流上通信,这些代理协同并相互交流来解决问题。在这个层次上看,Unix 是一个数据流体系。在这个角度上,shell 担任了关键角色,这门语言设计用来把单独的计算代理结合起来解决一个特定问题。  

在这次实践过程中,我发现自己对shell还是缺乏很多的了解,所以还需继续加深学习。

文档

实验五 编程实现自己的shell操作系统实验报告

学年第学期操作系统课程实验报告学院:    专业:班级:         姓名:                    学号:              任课教师:                  摘要shell是一个命令处理器(commandprocessor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell让你在命令行键入命
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top