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

  UNIX 进程间通信方式包括管道、FIFO 以及信号。
  System V 进程间通信包括 System V 消息队列、System V 信号量以及 System V 共享内存区。
  Posix 进程间通信包括 Posix 消息队列、Posix 信号量以及 Posix 共享内存区。

 Linix 进程之间的通信主要有下面几种:

  • 管道和命名管道:管道用于有亲缘关系的进程间的通信,命名管道还允许无亲缘关系进程间通信;
  • 信号:在软件层模拟中断机制,通知进程某事发生;
  • 消息队列:消息的链表包括 posix 消息队列和 System V 消息队列;
  • 共享内存:多个进程访问一块内存;
  • 信号量:进程间同步;
  • 套接字:不同机器间的进程通信。

  下面是对它们的详解:
 (1)管道 (pipe) 和命名管道 (named pipe) :管道可用于具有亲缘关系的进程间的通信;命名管道除具有管道所具有的功能外,还允许无亲缘关系进程间的通信。
 (2)信号 (signal) :信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生。一个进程收到一个信号,与处理器收到一个中断请求的效果可以说是一样的。
 (3)消息队列 (message queue) :消息队列是消息的链接表,包括 Posix 消息队列和 System V 消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息,对消息队列有读权限的进程则可以从消息队列中读取消息。
 (4)共享内存 (shared memory) :共享内存可以说是最有用的进程间通信方式,是最快的可用 IPC 形式。它是针对其他通信机制运行效率较低而设计的。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。
 (5)信号量 (semaphore) :主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
 (6)套接字 (socket) :这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,其应用非常广泛。

嵌入式Linux系统编程学习之十八进程间通信(IPC)简介相关推荐

  1. 嵌入式Linux系统编程学习之十二守护进程

    文章目录 前言 一.守护进程的特性 二.daemon 进程的编程规则 1.创建子进程,父进程退出 2.在子进程中创建新会话 前言   daemon 运行在后台,也称作"后台服务进程" ...

  2. 嵌入式Linux系统编程学习之三十四 Socket 编程

    文章目录 一.使用 TCP 的流程图 1.1 头文件包含 1.2 socket 函数 1.3 bind 函数 1.4 listen 函数 1.5 accept 函数 1.6 recv 函数 1.7 s ...

  3. 嵌入式Linux系统编程学习之三十线程的同步

    文章目录 一.条件变量 1.创建和注销 2.等待和激发 3.其他 二.信号灯 1.创建和注销 2.点灯和灭灯 3.获取灯值 4.其他 一.条件变量   条件变量是利用线程间共享的全局变量进行同步的一种 ...

  4. 嵌入式Linux系统编程学习之十五sigaction信号处理机制

    文章目录 一.信号处理情况分析 二.sigaction 信号处理注册 三.sigprocmask 信号阻塞 一.信号处理情况分析   在 signal 处理机制下,还有许多特殊情况需要考虑: 注册一个 ...

  5. 嵌入式Linux系统编程学习之十四signal信号处理机制

      可以用函数 signal 注册一个信号处理函数,原型为: #include <signal.h>typedef void(*sighandler_t)(int); //函数指针 voi ...

  6. 嵌入式Linux系统编程学习之十九标准管道流

      像文件操作有标准 IO 流一样,管道也支持文件流模式.用来创建连接到另一进程的管道 popen 和 pclose .   函数原型: #include <stdio.h>FILE * ...

  7. 嵌入式Linux系统编程学习之十六用程序发送信号

    文章目录 一.kill 和 raise 信号发送函数 二.sigqueue 信号发送函数 一.kill 和 raise 信号发送函数   kill 和 raise 信号的发送函数的原型分别为: #in ...

  8. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  9. 嵌入式Linux系统编程学习之一目录结构

    嵌入式Linux系统编程学习之一目录结构 文章目录 嵌入式Linux系统编程学习之一目录结构 前言 一.Linux目录结构 前言 Linux目录结构 一.Linux目录结构 /bin:存放Linux的 ...

最新文章

  1. 线性代数:05 实对称矩阵与二次型
  2. 研究一下,如何实现一个文件系统
  3. 关于CSS 3 及浏览器兼容性问题
  4. LeetCode Construct Binary Tree from Inorder and Postorder Traversal
  5. [PHP]Maximum execution time of 30 seconds exceeded
  6. Mybatis实现分库分表
  7. AntiSamy测试
  8. GraphQL 到底有什么魔力?
  9. Windows Workflow Foundation(WWF)介绍
  10. xml文件中““符号报错,无法识别
  11. 手把手教你编写一个简单的PHP模块形态的后门
  12. tensorflow下手写汉字识别及其可视化
  13. 人间繁华江上明月,乃浮生一梦,惟真情长在——读沈君山《浮生再记》(并转书评)...
  14. 服务器 关闭系统默认共享,默认共享还是有用滴!
  15. 蓝桥杯(纯C)比赛--菜鸟级
  16. ios logo 启动页大小
  17. 计算机程序中的自省程序(反射程序)(introspective program)是什么?(introspectable、introspection)
  18. 专线与家庭宽带的区别?
  19. python-11:lambda 函数
  20. 高通平台 android 12 定时开关机

热门文章

  1. python matplotlib使用ax绘图
  2. 进栈顺序为abcd则出栈顺序为_进栈顺序为a、b、c、d,则出栈顺序可以为?
  3. vue中使用百度地图,悬浮窗搜索功能
  4. C#图解教程 第十八章 枚举器和迭代器
  5. 版本控制工具--svn和git的使用(一) -----版本控制的好处以及分类
  6. 监听浏览器返回上一页
  7. 自学it18大数据笔记-第一阶段Java-day16-day17-day18-day19--day20-day21-day22——会持续更新...
  8. Mac下安装MySQL
  9. DataTemplate和ControlTemplate的关系
  10. 存储过程之游标笔记小结