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

1. IPC介绍

什么是进程间通信呢?下面用一幅图来表示:
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;
}

运行结果:
IPC_test
以上代码,得出结论:
父子进程在用户空间中不能直接交互数据

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(共享内存、消息队列、信号量)

各种通信方式的比较和优缺点
无名管道:速度慢,容量有限,只有父子进程能通讯
有名管道:任何进程间都能通讯,但速度慢
信号量:不能传递复杂消息,只能用来同步
消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
共享内存区:能够很容易控制容量,速度快,但要保持同步

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值