实验五-编程实现自己的shell操作系统实验报告_第1页
实验五-编程实现自己的shell操作系统实验报告_第2页
实验五-编程实现自己的shell操作系统实验报告_第3页
实验五-编程实现自己的shell操作系统实验报告_第4页
实验五-编程实现自己的shell操作系统实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上学年第 学期 操作系统 课程实 验 报 告学 院:      专 业: 班 级:           姓 名:                      学 号:       

2、;        任课教师:                   专心-专注-专业摘要shell 是一个命令处理器(command processor)是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell 独立于操作系统,这种设计让用户可以灵活选择适合自己的shel

3、l。shell 让你在命令行键入命令,经过shell 解释后传送给操作系统(内核)执行。Shell是一个管理进程和运行进程的程序。有三个主要功能。(1)运行程序:shell是一个程序启动器。(2)管理输入和输出:shell将进程的输入和输出连接到一个文件或其他的进程。(3)编程关键字:shell;解释器;程序; 实验日期:2017年 6月 12日实验题目实验五 编程实现自己的shell 实验地点实验目的了解shell的功能和其执行程序的过程,编写自己的shell程序实验内容1 编辑程序psh1.c,编译并执行。#include<stdio.h>#include<signal.

4、h>#include<string.h>#define maxargs 20#define arglen 100int main()char *arglistmaxargs+1; int numargs; char argbufarglen; char *makestring(); numargs=0; while(numargs<maxargs) printf("Arg%d?",numargs); if(fgets(argbuf,arglen,stdin)&&*argbuf!='n') arglistnumargs+

5、=makestring(argbuf); else if(numargs>0) arglistnumargs=0; execute(arglist); numargs=0; return 0;int execute(char *arglist)execvp(arglist0,arglist);perror("execvp failed");exit(1);char *makestring(char *buf)char *cp,*malloc(); bufstrlen(buf)-1='0' cp=malloc(strlen(buf)+1); if(cp=

6、0)fprintf(stderr,"no memoryn");exit(1);strcpy(cp,buf);return cp;2 编辑程序psh2.c,编译并执行。 #include<stdio.h>#include<signal.h>#include<string.h>#define maxargs 20#define arglen 100int main()char *arglistmaxargs+1; int numargs; char argbufarglen; char *makestring(); numargs=0; wh

7、ile(numargs<maxargs) printf("Arg%d?",numargs); if(fgets(argbuf,arglen,stdin)&&*argbuf!='n') arglistnumargs+=makestring(argbuf); else if(numargs>0)arglistnumargs=0; execute(arglist); numargs=0; return 0;int execute(char *arglist)int pid,exitstatus;pid=fork();switch(pid

8、)case -1:perror("fork failed"); exit(1);case 0: execvp(arglist0,arglist); perror("excvp failed"); exit(1);default:while(wait(&exitstatus)!=pid); printf("child exited with status %d,%dn",exitstatus>>8,exitstatus&0377);char *makestring(char *buf)char *cp,*ma

9、lloc(); bufstrlen(buf)-1='0' cp=malloc(strlen(buf)+1); if(cp=0)fprintf(stderr,"no memoryn"); exit(1);strcpy(cp,buf);return cp;3测试运行结果(1)分别执行psh1和psh2,执行过程中,输入ps命令写出两个程序运行的结果。并分析区别和原因。(2)在执行psh2过程中,输入./psh1和ps命令写程序运行的结果。实验结果(1)分析:在psh1.c中,构造函数intexecute()execvp(arglist0,arglist); ;e

10、xit(1);只执行一次,所以在输入ps后直接自动退出;在psh2.c中,构造函数int execute(char *arglist) switch()case -1: ; exit(1);case 0: execvp(arglist0,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)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论