【此博文,待日后完善】

进程通信方式:

  1.管道通信(匿名管道/命名管道)

  2.消息队列

  3.共享内存

  4.信号量

  

1.管道通信

无名管道用于具有亲缘关系进程间的通信
管道是半双工的,数据只能单向流动(双方通信需建立两个管道)
管道只能用于父子进程或兄弟进程之间
管道对于管道两端的进程而言就是一个文件,并单独构成一种文件系统,存在于内存中
写管道的内容添加在管道缓冲区的末尾,读管道则从缓冲区头部读出

有名管道在普通管道具备功能基础上,通过给管道命名的方法变成管道文件,允许无亲缘关系进程间通过访问管道文件进行通信

2.消息队列

也叫报文队列,是消息的链接表
有两种类型的消息队列:POSIX消息队列和系统V消息队列
运行于同一台机器上的进程间通信,与管道类似
可以用流管道或套接口方式取代
系统V消息队列
int msgget( ); 创建一个新队列或打开一个存在的队列
int msgsnd( ); 把消息添加到msgid代表的消息队列的末尾,消息的大小由msgsz指定。
int msgrcv( ); 从msgid代表的消息队列中取走一个消息。
int msgctl( ); 在由msgid标识的消息队列上执行cmd指定的操作。

3.共享内存

将同一块内存区映射到共享它的不同进程的地址空间中
效率高:进程可以直接读写内存,不需任何数据拷贝,避免了内核空间与用户空间的切换
内核未对共享内存的访问提供同步机制,需要依靠某种同步机制来同步对共享进程的访问
POSIX共享内存
通过用户空间挂载的tmpfs文件系统实现,持久化的
API:shm_open( )、mmap( )、munmap( )、shm_unlink( )等
System V共享内存
由内核本身的tmpfs实现,非持久化的
API:shmget( )、shmat( )、shmdt( )、shmctl( )等

4.信号量

也称信号灯,用来协调不同进程间的数据对象
提供对进程间共享资源访问控制的手段,用来保护共享资源
还可用于进程间及同一进程不同线程间的进程同步
两种类型
二值信号灯:取值只能为0或1,类似于互斥锁
计算信号灯:取值可以为任意非负值(受内核本身约束)
POSIX信号量和System V信号量(与共享内存的两种方式类似)

5.参考文献:

  [Linux进程间通信——使用命名管道](http://blog.csdn.net/ljianhui/article/details/10202699) 【命名管道讲解得非常有条理性】

[C++]Linux之进程间通信小结【待完善】的更多相关文章

  1. 【转载】Linux的进程间通信-信号量

    原文:Linux的进程间通信-信号量 Linux的进程间通信-信号量 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问 ...

  2. Linux环境进程间通信(三):消息队列

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  3. Linux环境进程间通信(一):管道及命名管道

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  4. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  5. 浅析Linux下进程间通信:共享内存

    浅析Linux下进程间通信:共享内存 共享内存允许两个或多个进程共享一给定的存储区.因为数据不需要在客户进程和服务器进程之间复制,所以它是最快的一种IPC.使用共享内存要注意的是,多个进程之间对一给定 ...

  6. <转>Linux环境进程间通信(二): 信号(上)

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html 原文如下: 一.信号及信号来源 信号本质 信号是在软件层 ...

  7. Linux多线程编程小结

     Linux多线程编程小结 前一段时间由于开题的事情一直耽搁了我搞Linux的进度,搞的我之前学的东西都遗忘了,非常烦躁的说,如今抽个时间把之前所学的做个小节.文章内容主要总结于<Linux程序 ...

  8. Linux 环境进程间通信(六):

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

  9. Linux环境进程间通信(五): 共享内存(下)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

随机推荐

  1. gradle配置统一管理

    配置全局参数 根目录build.gradle文件: 主要关注ext部分 // Top-level build file where you can add configuration options ...

  2. 洛谷P1080 国王游戏

    两个难点. 怎么想到的贪心? 首先确定算法: 显然不是数据结构题.转成图论也不太可能. 考虑DP:f[i][j]表示前i个人取j状态的最小最大值......2^1000,直接放弃. 因为出现了“最大值 ...

  3. dubbox知识

    关于dubbox有以下小知识要注意: 1.传参数不能传List参数以及NULL,可以传""和0 2.不能传int类型 3.配置provider的时候,注意不要启动重连机制 < ...

  4. HR算法具体过程

    首先研究HR算法在概率分布估计中的实现,我们再考虑如何将其应用于频繁项挖掘中. 一.确定输入数据类型 def generate_uniform_distribution(k): raw_distrib ...

  5. 开源的电商 B2C、B2B2C 电商系统-关于shopnc版权问题处处是陷阱啊

    最近有好多人收到过shopnc的律师函,关于这可能大部分人都是在淘宝购买的,或者直接在33hao购买的.很多人可能没注意版权的问题,以为在33hao购买就没问题,但这只是陷阱,大家一定要注意 来源:h ...

  6. (线性dp,LCS) POJ 1458 Common Subsequence

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65333   Accepted: 27 ...

  7. PEP8规范

    目录 一 代码编排 二 文档编排 三 空格使用 四 注释 五 文档描述 六 命名规范 七 编码建议 代码编排 1缩进,4个空格,不用tab键(因为可能不同系统tab的空格数不一定) 2每行最大长度79 ...

  8. 8款压箱底的Mac屏幕截图和录音录像工具软件,请你务必低调使用

    以下几款是是Mac上优秀的屏幕截图.录像和录音工具,有了这些工具,在Mac上进行截屏.录制视频或者录音都会事半功倍. 1. Snagit Mac上最好用最强大的屏幕截图工具,支持各种方式的屏幕截图以及 ...

  9. ETL过程

    ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数 ...

  10. go goroutine

    进程和线程 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的 一个独立单位. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更 小的能独立运行的基本单位. 一个进程可 ...