网站大量收购闲置独家精品文档,联系QQ:2885784924

《linux软件工程师(C语言)实用教程》第7章报告.ppt

《linux软件工程师(C语言)实用教程》第7章报告.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《linux软件工程师(C语言)实用教程》第7章报告

第 7 章 进程间的通信 本章重点 进程通信中信号概念及信号处理 进程间的管道通信编程 进程间的内存共享编程 7.1.1 信号及其使用 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。 信号事件的发生有两个来源: 硬件来源,如按下了键盘Delete键或者鼠标单击,通常产生中断信号(SIGINT)或者其它硬件故障。 软件来源,如使用系统调用或者是命令发出信号。最常用发送信号的系统函数是kill、raise、alarm、setitimer、sigation和sigqueue函数,软件来源还包括一些非法运算等操作。 7.1.1 信号及其使用 例7.1:列出系统所支持的所有信号列表。 (1)使用系统命令:[root@localhost root]#kill -l (2)分析: SIG信号 SIGRTMIN信号是从UNIX系统中继承下来的称为不可靠信号(也称为非实时信号)。 SIGRTMAX是为了解决前面“不可靠信号”问题而进行更改和扩充的信号,称为可靠信号(也称为实时信号)。 可靠信号(实时信号):支持排队,发送用户进程一次就注册一次,发现相同信号已经在进程中注册,也要再注册。 不可靠信号(非实时信号):不支持排队,发送用户进程判断后注册,发现相同信号已经在进程中注册,就不再注册,忽略该信号。前面显示的31种“SIG”开头的,也属于非实时信号。 7.1.1 信号及其使用 一旦有信号产生,用户进程对信号的响应有3种方式: 执行默认操作。Linux对每种信号都规定了默认操作。 捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数。 忽略信号。不希望接收到的信号对进程的执行产生影响,而让进程继续进行时,可以忽略该信号,即不对信号进程任何处理。 常见信号的含义及其默认操作 7.2.1 信号操作的相关函数 7.2.1 信号操作的相关函数 1. 信号发送 信号发送的关键,是使系统知道向哪个进程发送以及发送什么信号。能否向某一进程发送某一特定信号是和用户的权限密切相关的。 7.2.1 信号操作的相关函数 例7.2:设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。 7.2.1 信号操作的相关函数 7.2.1 信号操作的相关函数 2. 信号处理 当某个信号被发送到一个正在运行的进程时,该进程即对此特定信号注册相应的信号处理函数,以完成所需处理。 7.2.1 信号操作的相关函数 例7.3:设计一个程序,要求程序运行后进入无限循环,当用户按下中断键(Ctrl+C)时,进入程序的自定义信号处理函数,当用户再次按下中断键(Ctrl+C)后,结束程序运行。 7.2.1 信号操作的相关函数 7.2.1 信号操作的相关函数 3. 信号阻塞 有时既不希望进程在接收到信号时立刻中断进程的执行,也不希望此信号完全被忽略掉,而是延迟一段时间再去调用信号处理函数,这个时候就需要信号阻塞来完成。 7.2.1 信号操作的相关函数 例7.4:设计一个程序,要求程序主体运行时,即使用户按下的中断键(Ctrl+C),也不能影响正在运行的程序,等程序主体运行完毕后才进入自定义信号处理函数。 7.2.1 信号操作的相关函数 7.2 管道 在Linux中,管道是一种特殊的文件,对一个进程来说,管道的写入和读取与一个普通文件没有区别。 在Linux系统中,管道用于两个进程间的通信,这两个进程要有同源性,即它们必须是最终由同一个进程所生成的进程。管道通信采用的是半双工方式,即同一时间只允许单方向传输数据。 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。 7.2.1 低级管道操作 低级管道操作时,建立管道用pipe函数,建立管道后Linux系统会同时为该进程建立2个文件描述符pipe_fd[0]和pipe_fd[1]。pipe_fd[0]用来从管道读取数据,pipe_fd[1]用来把数据写入管道。 7.2.1 低级管道操作 例7.5:设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取前输出字符串。 7.2.1 低级管道操作 7.2.2 高级管道操作 例7.6:设计一个程序,要求用popen创建管道

文档评论(0)

6663144 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档