LINUX环境编程-进程间通讯范例.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * 2009年12月22日 * LINUX应用编程 - 目录 IPC概述 管道 FIFO 共享存储 套接字 信号量 消息队列 * 进程间通讯 – IPC概述 信号(signal) 亲缘进程和非亲缘进程都可以, 也可以进程自己给自己递送信号。 信号量(semaphore) 主要是线程间和亲缘和非亲缘的进程间的同步手段,不做数据传输之用。 管道 只允许亲缘进程间的通讯。 命名管道(FIFO) 除了亲缘进程可以通讯外,非亲缘进程也可以通讯。 共享内存 多个进程可以访问同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝 。可以在亲缘和非亲缘的进程间使用。 套接字 最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。 消息队列 可以用在非亲缘关系的进程之间使用 * 进程间通讯 – 管道 管道是UNIX IPC的最老形式,并且所有U N I X系统都提供此种通信机制,管道有两种限制; (1) 它们是半双工的。数据只能在一个方向上流动。 (2) 它们只能在具有公共祖先的进程之间使用。通常,一个管道由一个进程创建,然后该进程调用f o r k,此后父、子进程之间就可应用该管道。 管道的写和读有两个特性: (1) 数据写入时,放在管道的结尾。 (2) 数据读取时,从管道的头开始读取。 * 进程间通讯 – pipe函数 管道是由调用pipe函数而创建的。 #include unistd.h int pipe(int filedes[2]); 参数filedes返回两个文件描述符: filedes[0]为读而打开,filedes[1]为写而打开。filedes[1]的输出是filedes[0]的输入。 由于管道是单向的,所以通常一个进程需要关闭写端或者读端,而另一个进程则关闭相应的读端或写端。 写端不存在时,读端会收到文件结束符。读端不存在时,写端会收到SIGPIPE信号。如果忽略该信号或者捕捉该信号并从其处理程序返回,则w r i t e出错返回,e r r n o设置为EPIPE 成功返回0,失败返回-1. 缺点:只能用于亲缘进程间通讯,在一个进程内管道几乎是没有实际用处的 在写管道时,常数PIPE_BUF规定了内核中管道缓存器的大小。如果对管道进行w r i t e调用,而且要求写的字节数小于等于PIPE_BUF,则此操作不会与其他进程对同一管道(或FIFO)的write操作穿插进行。但是,若有多个进程同时写一个管道(或FIFO),而且某个或某些进程要求写的字节数超过PIPE_BUF字节数,则数据可能会与其他写操作的数据相穿插。 * 进程间通讯 – fork前后管道关系 f o r k之后做什么取决于我们想要有的数据流的方向。对于从父进程到子进程的管道,父进程关闭管道的读端(f d [ 0 ]),子进程则关闭写端(f d [ 1 ]) Fork后的半双工管道 从父进程到子进程的管道 对于从子进程到父进程的管道,父进程关闭fd[1],子进程关闭fd[0] * 进程间通讯 – popen和pclose函数 我们常用到的一个操作是创建一个连接到另一个进程的管道,然后读其输出或向其发送输入,所以标准I/O库为实现这些操作提供了两个函数popen和pclose。这两个函数实现的操作是:创建一个管道,f o r k一个子进程,关闭管道的不使用端, e x e c一个s h e l l以执行命令,等待命令终止。 #include stdio.h FILE *popen(const char *command, const char *type); 返回:若成功则为文件指针,若出错则为N U L L int pclose(FILE *stream); 返回:command的终止状态,若出错则为- 1 函数popen 先执行f o r k,然后调用exec以执行command,并且返回一个标准I/O文件指针。 如果type是r,则文件指针连接到command的标准输出。 如果type 是“w”,则文件指针连接到command 的标准输入。 pclose函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose返回的终止状态与shell执行exit一样。 * 进程间通讯 – FIFO F I F O有时被称为命名管道。管道只能由相关进程使用,它们共同的祖先进程创建了管道。但是,通过F I F O,不相关的进程也能交换数据。 创建F I F O类似于创建文件。确实,F I F O的路径名存在于文件系统中。 #include sys/types.h #include s

文档评论(0)

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

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

1亿VIP精品文档

相关文档