进程间通信(IPC)

概述

1、Linux使用的进程间通信方式主要包括:

(1)管道(pipe)和有名管道  (2)信号(signal)  (3)共享内存   (4)消息队列  (5)信号量  (6)套接字(socket)

2、问:为什么进程间需要通信?

(1)数据传输  一个进程需要将它的数据发送给另外一个进程

(2)资源共享  多个进程间共享同样的资源

(3)通知事件  一个进程需要向另外一个或一组进程发送消息,通知它们发生了某种事件

(4)进程控制  某些进程希望能够控制另一个进程的执行(比如Debug进程),此时,控制进程希望能够拦截另外一个进程的所有操作,并且能够及时知道它的状态改变。

3、Linux进程间通信由以下几部分发展以来:

(1)UNIX进程间通信  (2)基于System V 进程间通信  (3)POSIX进程间通信

一、管道通讯

管道:单向的、先进先出的,它将一个进程的输出和另一个进程的输入连接在一起。写进程在管道的尾部写入数据,读进程在管道的头部读取数据。

注: 数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将堵塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。】

分类:无名管道  用于父、子进程间的通信;

命名管道  用于运行于同一系统中的任意两个进程间的通信。

(1)无名管道  由pipe()函数创建:

1 #include <unistd.h>
2 int pipe(int filedis[2]);

当一个管道建立时,它会建立两个文件描述符,存放在filedis数组中:filedis[0]用于读管道,filedis[1]用于写管道。  返回值:成功,返回0;失败,返回-1,并设置errno。

管道的关闭:关闭管道只需将这两个文件描述符关闭即可,可以使用普通的close函数逐个关闭。

注:必须在系统调用fork()前调用pipe(),否则子进程将不会继承文件描述符。

 1  //创建管道
 2  #include <unistd.h>
 3  #include <errno.h>
 4  #include <stdio.h>
 5  #include <stdlib.h>
 6
 7  int main()
 8  {
 9      int pipe_fd[2];
10      if(pipe(pipe_fd) < 0)
11      {
12          printf("pipe create error.\n");
13          return -1;
14      }
15      else
16          printf("pipe create success.\n");
17
18      close(pipe_fd[0]);
19      close(pipe_fd[1]);
20      return 0;
21  }

创建管道

二、信号通讯

三、共享内存通讯

时间: 2024-10-14 09:55:17

进程间通信(IPC)的相关文章

Android中进程间通信(IPC)方式总结

IPC为进程间通信或跨进程通信,是指两个进程进行进程间通信的过程.在PC和移动设备上一个进程指的是一个程序或者一个应用,所以我们可以将进程间通信简单理解为不同应用之间的通信,当然这种说法并不严谨. 在Android中,为每一个应用程序都分配了一个独立的虚拟机,或者说每个进程都分配一个独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机互相访问数据需要借助其他手段.下面分别介绍一下在Android中进行实现IPC的方式. 1.使用Bundle 我们知道在Android中三大

[原创]chromium源码阅读-进程间通信IPC.消息的接收与应答

chromium源码阅读-进程间通信IPC.消息的接收与应答 chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的,最后的数据都是以二进制流的方式进行传播,pickle类就是负责消息的封包与解包功能,它将各种数据已二进制的形式写到内存缓冲区中,在实际通信的时候通过与其他一些辅助类与模板函数来实现具体数据结构的写与读.本文主要介绍的是chromium在将消息发送与接收过程中,以及chromium如何通过各种消息宏与C

UnixC——进程间通信(IPC)

一.进程间通信(IPC):Unix / Linux 系统基于多进程,进程和进程之间数据的交互. 1.常见的IPC:1)文件    2)信号    3)管道(FIFO)    4)共享内存    5)消息队列    6)信号量集    7)网络编程(socket) 2.共享内存.消息队列和信号量集遵循相同的规范,统称为 XSI IPC. ------------------------------------------ 二.管道:一种仅做为交互媒介的IPC的特殊的文件,不存储任何的数据,文件名后

进程间通信---IPC对象 之 消息队列

IPC对象,既我们所说的进程间通信,下面就来总结一下都有哪些方式以及怎么使用. 一 消息队列 1 消息队列的创建: int msgget(key_t key, int msgflg); 功能:获取指定的key值的消息队列ID 参数: @key <1>IPC_PRIVATE:每次都会创建一个新的消息队列 [用在亲缘关系的进程间痛惜] <2>ftok函数获的key [用在非亲缘关系进程间通信] key_t ftok(const char *pathname, int proj_id);

Linux 进程间通信(IPC)

Linux 进程间通信(IPC): Linux系统中除了进程和进程之间通信,我想大家也应该关注用户空间与内核空间是如何通信的,比方说netlink等等.除了传统进程间通信外像Socket通信也需要掌握的! /*-------------------------------------------------------------------------- * Project: aipc.c * Name: zwp * Date: 2014/6 *------------------------

操作系统之进程篇(4)--经典进程间通信(IPC)问题

1. 哲学家进餐问题: 问题描述: 五个哲学家在一个圆桌上进餐,每人的面前放了一盘意大利面,两个盘子之间有一个叉子,但是由于盘子里面的面条十分光滑,需要两个叉子才能进行就餐行为.餐桌的布局如下图所示: 假设哲学家的生活中只有两个活动:吃饭和思考[吃饭维持自身之生存,思考探究生存之意义],当然这样的哲学家在现实之中是不存在的.当一个哲学家在殚精竭虑之时,饥饿感随之而来,这是他会拿起左右手边的两个叉子来想享用这俗世之中的美味.酒足饭饱之后,又"躲进小楼成一统,管他春夏与秋冬"去了.问题是:

Linux进程间通信(IPC)简介

Linux IPC的发展 Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的.而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同.前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",其通信进程主要局限在单个计算机内:而BSD则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.而Linux则把两者的优势都继承

饿了么开源项目Hermes:新颖巧妙易用的Android进程间通信IPC框架

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51464518 Android进程间通信IPC是比较高级的话题,很多Android程序员碰到IPC就觉得头疼,尤其是AIDL这类东西. 公司最近在研究DroidPlugin插件开发,DroidPlugin把每个子app都变成一个进程.这样的话子app和主app如果需要共享数据,就需要IPC.所以我开发了Hermes框架,让IPC变得非常简单优雅

进程间通信IPC:消息队列,信号量,共享内存

2015.3.4星期三 阴天 进程间通信:IPC 文件对象:记录文件描述符,文件开关等 IPC标示符:系统全局的流水号两个进程要通信,打开的是唯一的对象进行通讯,通过key操作 XSI IPC:消息队列,信号量,共享内存. ipcs 查看ip对象共享内存,信号量,消息队列等信息ipcrm 删除一个IP对象 Linux为用户提供了完善的,强大的网络功能完善的内置网络:其他操作系统不包含如此紧密的和内核结合在一起的网络部分 共享内存标示符的获取有两种方法:ftok(pathname,id)另一个是K

进程间通信(IPC)之共享内存

★IPC方法包括管道(PIPE).消息队列(Message_Queue).旗语.共用内存(ShareMemory)以及套接字 (Socket).进程间通信主要包括了管道.系统IPC(包括了消息队列.信号以及共享存储).套接字(Socket). 此文将叙述共享内存的相关内容. 在此之前先来看看关于进程的内存映像的相关内容. 一.进程的内存映像(区别于可执行程序文件): 指的是内核在内存中如何存放可执行程序文件.两者的区别表现在三个方面:①可执行程序是位于硬盘上的,而内存映像位 于内存上: ②可执行