您的位置:首页 > 运维架构 > Linux

Linux进程入门学习(五)-IPC介绍

2017-08-20 09:58 393 查看

1. IPC介绍

什么是进程间通信呢?下面用一幅图来表示:



进程间通信,简称IPC,就是在不同进程之间传播或交换信息。

通信目的:共享资源、通知事件、数据传输、进程控制

进程间通信类型

有两种:

a. 无亲缘关系间通信,如上面的进程A 与B

b. 有亲缘关系间通信,如上面的进程B 与B’

示例:“父子进程在用户空间中不能直接交互数据”

参考代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>

int main(int argc,char **argv)
{
pid_t pid;
int sync_flag = 0;
pid = fork();
if(pid == 0) // child process
{
int i;
while(sync_flag == 0);
for(i = 0; i < 5; i++)
{
printf("this is child process \n");
usleep(100);
}
}
else if(pid > 0) // parent process
{
int i;
for(i = 0; i < 5; i++)
{
printf("this is parent process \n");
usleep(100);
}
sync_flag = 1;
printf("the parent end \n");
}
while(1);
return 0;
}


运行结果:



以上代码,得出结论:

父子进程在用户空间中不能直接交互数据

2.IPC 发展历史

1)早期UNIX 进程间通信:主要包括无名管道、FIFO、信号

2)基于System V 进程间通信:主要包括System V 消息队列、System V 信号灯、System V 共享内存

3)基于POSIX 进程间通信:主要包括posix 消息队列、posix 信号灯、posix 共享内存

linux 下的进程通信基本上是从Unix 平台上的进程通信继承而来,所以继承早期UNIX 进程间通信,同时兼容了贝尔实验室的system V 与IEEE 的Posix 标准,所以实现linux 系统的进程间通信方式有:

1)管道(有名管道、无名管道)

2)信号signal

3)sysetm V IPC(共享内存、消息队列、信号量)

4)POSIX IPC(共享内存、消息队列、信号量)

各种通信方式的比较和优缺点

无名管道:速度慢,容量有限,只有父子进程能通讯

有名管道:任何进程间都能通讯,但速度慢

信号量:不能传递复杂消息,只能用来同步

消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题

共享内存区:能够很容易控制容量,速度快,但要保持同步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息