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

Linux进程间通信.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. IPC(Interprocess Communication)简介 1 2. 信号通信signal 2 3. 标准流管道 3 4. 无名管道(PIPE) 4 5. 命名管道(FIFO) 6 5.1. 创建、删除FIFO文件 6 5.2. 打开、关闭FIFO文件 7 5.3. 读写FIFO 7 6. 共享内存 8 7. 消息队列 16 8. 信号量 19 IPC(Interprocess Communication)简介 Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的。而对UNIX发展做出重大贡献的两大主力ATT的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。而Linux则把两者的优势都继承了下来 UNIX进程间通信(IPC)方式包括管道、FIFO以及信号。 System V进程间通信(IPC)包括System V消息队列、System V信号量以及System V共享内存区。 Posix 进程间通信(IPC)包括Posix消息队列、Posix信号量以及Posix共享内存区。 linux进程之间的通讯主要有下面几种: 1 管道pipe和命名管道:管道有亲缘关系进程间的通信,命名管道还允许无亲缘关系进程间通信 2 信号signal:在软件层模拟中断机制,通知进程某事发生 3 消息队列:消息的链表包括posix消息队列和SystemV消息队列 4 共享内存:多个进程访问一块内存主要以同步 5 信号量:进程间同步 6 套接字socket:不同机器间进程通信 下面是对它们的详解: ·管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 ·信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。 ·消息队列(Messge Queue):消息队列是消息的链接表,包括Posix消息队列和SystemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。 ·共享内存(Shared memory):可以说是最有用的进程间通信方式,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量。 ·信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。 ·套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。 信号通信signal 信号是unix进程通信最古老的方法。它模拟中断机制,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。 信号分为:不可靠信号和可靠信号。不可靠信号的处理过程:如果发现该信号已经注册,就忽略该信号。因此,若前一个信号还未注销又产生了相同的信号就会产生信号丢失。而当可靠信号发送给一个进程时,不管该信号是否已经在进程中注册,都会被再注册一次,因此信号就不会丢失。所有可靠信号都支持排队,而所有不可靠信号都不支持排队。 对于可靠信号和不可靠信号示例如下:signal.c #include stdio.h #include signal.h #include stdlib.h int iCount = 0; void handler(int iSigNo) { iCount ++; printf(%d : doing %d\n, iCount, iSigNo); sleep(3); printf(%d : done %d\n, iCount, iSigNo); } int main(int argc, char* argv[]) {

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档