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

Linux基础及应用教程 陈英 第5章 进程间通信新.ppt

Linux基础及应用教程 陈英 第5章 进程间通信新.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
陈英 梁建武主编 中国水利水电出版社 Linux基础及应用 第5章 进程间通信 5.1 Linux下进程间通信概述 Linux下的进程间通信方式主要有: (1)管道(pipe) 管道分为无名管道和有名管道,无名管道只能用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信,而有名管道除具有无名管道具有的功能外,还能用于无亲属关系的进程间的通信。 (2)信号(signal) 信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。Linux除了支持Unix早期信号语义函数signal外,还支持语义符合Posix.1标准的信号函数sigaction。 (3)消息队列 消息队列是消息的链接表,包括Posix消息队列system V消息队列。它克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点,使具有写权限的进程可以向队列中添加消息,具有读权限的进程可以读取队列中的消息。 (4)共享内存 共享内存是最有用的进程间通信方式,它使得多个进程可以访问同一块内存空间。它往往需要与其它通信机制结合,如与信号量结合使用可实现进程间的同步与互斥。 (5)内存映射(mapped memory) 内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。 (6)信号量(semaphore) 主要作为进程间以及同一进程不同线程之间的同步手段。 (7)套接字(socket) 应用更为广泛的进程间通信机制,可用于不同机器之间的进程间通信。所有提供了TCP/IP协议栈的操作系统几乎都提供了套接字,而所有这样操作系统,对套接字的编程方法几乎是完全一样的。 5.2 管道通信 5.2.1 管道概述   管道是Linux支持的最初Unix IPC形式之一,具有以下特点: (1)管道是半双工的通信模式,数据只能向一个方向流动。 (2)只能用于具有亲缘关系的进程间的通信,即父子进程或者兄弟进程之间。 (3)管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在与内存中。 5.2.2 管道创建与关闭   创建管道可以通过调用pipe函数来实现。pipe函数的语法要点如下: 头文件:#include unistd.h 函数原型: int pipe(int fd[2])   pipe函数通过传入两个文件描述符来创建管道,调用成功时返回0,否则返回-1。 5.2.3 管道读写 一般文件的I/O函数都可以用于管道,如close、read、write等等。 5.2.4 标准流管道 系统提供了一个popen函数来完成标准流管道的一系列创建过程;   popen函数的使用可大大减少代码的编写量,但是创建管道时缺少灵活性,该函数只能支持标准的I/O函数,不能使用read、write这类不带缓冲的I/O函数。   关闭标准流管道使用pclose函数来完成,该函数关闭标准I/O流,并等待命令执行结束。 5.2.5 FIFO   命名管道(named pipes),因为这种管道的操作方式基于“先进先出”原理,也称为FIFO (First In First Out) 在程序中调用mkfifo函数创建FIFO管道,mkfifo函数调用的原型为: #include sys/types.h #include sys/state.h int mkfifo(const char *filename, mode_t mode); 5.3 信号机制 5.3.1 信号概述 1.信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的。 信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill、 raise、 alarm、setitimer和sigqueue函数,软件来源还包括一些非法运算等操作。 2.信号的种类 可以从两个不同的分类角度对信号进行分类: (1)可靠性方面:可靠信号与不可靠信号; (2)与时间的关系上:实时信号与非实时信号。 3.进程对信号的响应 进程对信号的响应有以下三种方

文档评论(0)

精品课件 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档