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(共享内存、消息队列、信号量)
各种通信方式的比较和优缺点
无名管道:速度慢,容量有限,只有父子进程能通讯
有名管道:任何进程间都能通讯,但速度慢
信号量:不能传递复杂消息,只能用来同步
消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
共享内存区:能够很容易控制容量,速度快,但要保持同步
相关文章推荐
- 2)Linux程序设计入门--进程介绍
- linux操作系统下c语言编程入门 -- (2)进程介绍
- linux操作系统下c语言编程入门--进程介绍
- Linux驱动入门学习(一):入门介绍
- Linux进程入门学习(三)-进程创建等待
- Linux入门学习命令介绍
- 2)Linux程序设计入门--进程介绍
- Linux进程入门学习(八)-消息队列通信
- Linux进程入门学习(二)-基础知识
- Linux进程入门学习(六)-管道通信
- 嵌入式设备上的LINUX系统开发与嵌入式linux的入门学习介绍
- Linux入门学习——进程
- Linux进程入门学习(四)-进程启动退出
- 【Linux全面学习】1.Linux入门介绍
- Linux入门学习,怎么使用Vim编辑器编辑保存文件?以及查看浏览文件的几种方式介绍——(四)
- Linux进程入门学习(一)-认识进程
- 2)Linux程序设计入门--进程介绍
- Linux进程入门学习(七)-信号通信
- linux系统学习:基础篇(系统介绍以及命令行的使用)快速入门linux系统
- 2、Linux程序设计入门--进程介绍