1 / 53
文档名称:

linux进程间通信公开课获奖课件赛课一等奖课件.ppt

格式:ppt   大小:153KB   页数:53页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

linux进程间通信公开课获奖课件赛课一等奖课件.ppt

上传人:书犹药也 2025/5/7 文件大小:153 KB

下载得到文件列表

linux进程间通信公开课获奖课件赛课一等奖课件.ppt

相关文档

文档介绍

文档介绍:该【linux进程间通信公开课获奖课件赛课一等奖课件 】是由【书犹药也】上传分享,文档一共【53】页,该文档可以免费在线阅读,需要了解更多关于【linux进程间通信公开课获奖课件赛课一等奖课件 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。linux进程间通信
进程间通信概述
管道通信
信号
共享内存
消息队列
1、进程间通信概述
进程间通信有如下某些目的:
数据传播:一种进程需要将它的数据发送给另一种进程,发送的数据量在一种字节到几兆字节之间。
共享数据:多种进程想要操作共享数据,一种进程对共享数据的修改,别的进程应当立即看到。
告知事件:一种进程需要向另一种或一组进程发送消息,告知它(它们)发生了某种事件(如进程终止时要告知父进程)。
资源共享:多种进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。
进程控制:有些进程但愿完全控制另一种进程的执行(如Debug进程),此时控制进程但愿可以拦截另一种进程的所有陷入和异常,并可以及时懂得它的状态变化。
linux进程间通信(IPC)由如下几部分发展而来:
初期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。
UNIX进程间通信方式包括:管道、FIFO、信号。
System V进程间通信方式包括:System V消息队列、System V信号灯、System V共享内存。
POSIX进程间通信包括:posix消息队列、posix信号灯、posix共享内存。
目前linux使用的进程间通信方式:
(1)管道(pipe)和有名管道(FIFO)
(2)信号(signal)
(3)消息队列
(4)共享内存
(5)信号量
(6)套接字(socket)
2、管道通信
一般的Linux shell都容许重定向,而重定向使用的就是管道。例如:
ps | grep vsftpd
管道是单向的、先进先出的、无构造的、固定大小的字节流,它把一种进程的原则输出和另一种进程的原则输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的首端读出数据。数据读出后将从管道中移走,其他读进程都不能再读到这些数据。管道提供了简单的流控制机制。进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样,管道已经满时,进程再试图写管道,在其他进程从管道中移走数据之前,写进程将一直阻塞。
管道重要用于不一样进程间通信。
管道创立与关闭
创立一种简单的管道,可以使用系统调用pipe( )。它接受一种参数,也就是一种包括两个整数的数组。假如系统调用成功,此数组将包括管道使用的两个文献描述符。创立一种管道之后,一般状况下进程将产生一种新的进程。
系统调用:pipe( );
原型:int pipe(int fd[2]);
返回值:假如系统调用成功,返回0。假如系统调用失败返回- 1:
errno = EMFILE (没有空闲的文献描述符)
EMFILE (系统文献表已满)
EFAULT (fd数组无效)
注意:fd[0] 用于读取管道,fd[1] 用于写入管道。
图1 linux中管道与文献描述符的关系
#include <>
#include <>
#include <>
#include <>
int main()
{
int pipe_fd[2];
if(pipe(pipe_fd)<0){
printf("pipe create error\n");
return -1;
}
else
printf("pipe create success\n");
close(pipe_fd[0]);
close(pipe_fd[1]);
}
管道读写
管道重要用于不一样进程间通信。实际上,一般先创立一种管道,再通过fork函数创立一种子进程。
图2 父子进程管道的文献描述符对应关系
子进程写入和父进程读的命名管道:
图 3 关闭父进程fd[1] 和 子进程[0]