实现简单的Shell 程序.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三:实现简单的Shell 程序 缪海波 实验目的 准备知识 实验内容 3.1 实验目的 用C语言实现简单的shell程序 学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(用信号和管道进行进程间通信) 熟悉使用Linux下的软件开发工具gcc 3.2 什么是Shell Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。 Shell调用系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。 Shell:如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进行通讯。 3.2 Shell基本执行原理 Shell程序执行过程 读取用户输入的命令行; 解析命令,按照命令名查找并调用系统文件,将其它参数封装为特定的形式传递给系统调用execve(); 由终端进程调用fork()函数建立一个子进程; 终端进程本身调用wait4()挂起当前进程来等待子进程完成(后台命令除外)。子进程通过调用execve( )运行,根据命令名到目录中查找有关文件(命令解释程序构成的文件),将它调入内存,执行这个程序(解释命令); 如果是后台命令符号(以结尾),不用调用wait4()进行等待而是直接提示用户输入下一条命令,转到a),否则调用wait4( )等待子进程完成。 3.2 基础知识 系统调用 文件描述符 输入输出重定向 进程间的通信机制(信号、管道) 3.2 基础知识 - 系统调用 Linux所有系统资源被内核管理,任何涉及访问系统资源的用户请求或应用程序请求,必须由内核代码处理。出于安全考虑,用户进程是不能随意访问内核代码的。 Linux提供系统调用,让用户进程能调用内核代码的运行。这些系统调用允许用户操纵进程、文件和其他系统资源,从用户级切换到内核级。 系统调用与普通函数调用的区别在于系统调用的执行会引起特权级的切换,是一种受约束的、为切换到保护核心的“函数调用”。 3.2 基础知识 - 文件描述符 在Linux中,每个打开的文件都有一个小的非负整数与之对应,称为文件描述符。例如: 0: stdin(标准输入) 1: stdout(标准输出) 2: stderr(标准报错输出) 这三个“设备文件”的文件描述符,也称为标准文件描述符。内核根据文件描述符执行文件操作(读写文件等)。 3.2 基础知识 - 文件描述符 标准文件和文件描述符表 每个进程都有一张它所打开的文件描述符表 3.2 基础知识 - 输入输出重定向 输入重定向后命令的输入来自于输入文件 输出重定向后命令的输出是输出到文件 3.2 基础知识 - 进程通信1 信号 信号允许一个进程在某一事件发生时与另一个进程(接收者进程)通信,该进程把事件对应的消息传递给接收者进程,接收者进程收到一个信号时,会采取某些相应的动作。信号的值表明发生了哪种事件。 信号与进程同步的信号量机制概念不同,理解为一种传递消息的进程通信类型。 3.2 基础知识 - 进程通信2 管道 管道允许一条命令的标准输出作为一条命令的标准输入,允许同一个系统上的两个相关的进程进行通信(典型情形是父子进程),而且进程的通信是单向的。管道的语义如图: 3.2 基础知识 – 接口介绍1 3.2 基础知识 – 接口介绍1 3.2 基础知识 – 接口介绍1 3.2 基础知识 – 接口介绍2 3.2 基础知识 – 接口介绍2 3.2 基础知识 – 接口介绍3 3.2 基础知识 – 接口介绍3 3.2 基础知识 – 接口介绍3 3.2 基础知识 – 接口介绍4 3.2 基础知识 – 接口介绍5 3.2 基础知识 – 接口介绍6 3.2 基础知识 – 接口介绍6 3.2 基础知识 – 接口介绍7 3.2 基础知识 – 接口介绍8 3.2 基础知识 – 接口介绍8 3.2 基础知识 – 接口介绍8 3.2 基础知识 – 接口介绍8 3.2 基础知识 – 接口介绍9 3.2 基础知识 – 接口介绍10 3.3 实验内容 1. 运行示例程序fork_exp.c,观察结果,分析程序。 1) 编译fork_exp.c:gcc fork_exp.c -o fork 2) ./fork 运行程序 3) ps u 查看进程,找到fork父进程与子进程

文档评论(0)

guoxiachuanyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档