【进程间通信】进程间通信方式汇总

进程间通信的七种方法实战演示!值得收藏! 线程和进程间的通讯(Inter-Process Communication, IPC)是操作系统中的一个重要概念,用于实现不同进程或同一进程中的不同线程之间的数据交换和协调。以下是几个常见的进程间通信的方式:管道、消息队列、共享内存、信号、套接字、信号量、文件映射 阅读详情
img
个人主页:董哥聊技术
我是董哥,嵌入式领域新星创作者
创作理念:专注分享高质量嵌入式文章,让大家读有所得!
img

随着我们的进程越来越多,难免不同进程之间要互相传输一些数据,那么这个时候该怎么办呢?

下面主要简单了解一下,进程间通信(InterProcess Communication,IPC)的几种实现方式!

 

1、管道模型

管道模型与软件生命周期模型——瀑布模型(Waterfall Model)很相似。

所谓的瀑布模型,其实就是将整个软件开发过程分成多个阶段,往往是上一个阶段完全做完,才将输出结果交给下一个阶段。

image-20220922134815245

还记得咱们最初学 Linux 命令的时候,有下面这样一行命令:

ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9

这里面的竖线“|”就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。

从管道的这个名称可以看出来,管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,我们需要创建两个管道才行。

管道又可以分为匿名管道和命名管道!

 

1.1 匿名管道

如上命令:

ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9

匿名管道:用"|” 表示的管道,意思就是这个类型的管道没有名字,用完了就销毁了。竖线代表的管道随着命令的执行自动创建、自动销毁。用户甚至都不知道自己在用管道这种技术,就已经解决了问题。

 

1.2 命名管道

命名管道,这个类型的管道需要通过 mkfifo 命令显式地创建。

mkfifo donge		#建立一个管道

donge就是这个管道的名称。管道以文件的形式存在,这也符合 Linux 里面一切皆文件的原则。

 

下面我们看一下文件类型

ls -l
prw-rw-r-- 1 dong dong     0 Sep 28 17:09 donge

可以看到,这个文件的类型是 p,就是 pipe 的意思。

 

往管道中写入数据

echo "hello world" > donge

这个时候,管道里面的内容没有被读出,这个命令就是停在这里的,即进程被堵塞。

这说明当一个项目组要把它的输出交接给另一个项目组做输入,当没有交接完毕的时候,前一个项目组是不能撒手不管的。

重新打开一个终端,读出管道数据

cat < hello 
hello world

一方面,我们能够看到,管道里面的内容被读取出来,打印到了终端上;

另一方面,echo 那个命令正常退出了,也即交接完毕,前一个项目组就完成了使命,可以解散了。

 

管道通信,我们可以看出,瀑布模型的开发流程效率比较低下,因为团队之间无法频繁地沟通。而且,管道的使用模式,也不适合进程间频繁的交换数据。

 

2、消息队列

image-20220922135603302

消息队列可以理解为发邮件,每一封邮件都视为一个独立的数据单元,也就是消息体,每个消息体都是固定大小的存储块,在字节流上不连续。

这个消息结构的定义我写在下面了。这里面的类型 type 和正文 text 没有强制规定,只要消息的发送方和接收方约定好即可。

struct msg_buffer {
    long mtype;
    char mtext[1024];
};

 

2.1 创建消息队列

消息队列的创建,需要用到msgget函数

int msgget(key_t key, int msgflg);
  • key:该参数是消息队列的唯一标识,由ftok生成。

  • msgflg:取值有以下几个选择:IPC_CREAT、IPC_EXCL ,这两个参数详细的作用可以man msgflg看详细介绍。

  • 返回值:返回一个近乎唯一的Message queue id

 

那么,key是如何由ftok生成的呢?

我们可以指定一个文件,调用ftok ,它会根据这个文件的 inode,生成一个近乎唯一的 key。

key_t ftok(const char *pathname, int proj_id);
  • pathname:文件信息,必须指定在一个存在的,可访问的文件
  • proj_id:8bit的数据,0-255随意设定

这样就可以获得一个近乎唯一的key了!

 

只要在这个消息队列的生命周期内,这个文件不要被删除就可以了。只要不删除,无论什么时刻,再调用 ftok,也会得到同样的 key。

 

综上,创建一个消息队列只需两步:

①:ftok生成一个key

②:msgget生成一个消息队列的ID

如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>
 
 
int main() {
  int messagequeueid;
  key_t key;
 
 
  if((key = ftok("/root/messagequeue/messagequeuekey", 1)) < 0)
  {
      perror("ftok error");
      exit(1);
  }
 
 
  printf("Message Queue key: %d.\n", key);
 
 
  if ((messagequeueid = msgget(key, IPC_CREAT|0777)) == -1)
  {
      perror("msgget error");
      exit(1);
  }
 
 
  printf("Message queue id: %d.\n", messagequeueid);
}

ftok要指定一个存在的文件,所以我们在执行之前,需要创建该文件。

 

查看消息队列

System V IPC 体系有一个统一的命令行工具:ipcmk,ipcs 和 ipcrm 用于创建、查看和删除 IPC 对象。

查看创建的IPC对象:ipcs -q

dong@ubuntu:~//Interprocess_Communication$ ipcs 

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    
0x01110005 0          dong       777        0            0           

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

 

2.2 发送消息

消息队列发送消息,主要调用msgsnd 函数

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
  • msqid:该参数是msgget所得到的message queue 的 id
  • msgp:消息结构体
struct msg_buffer {
    long mtype;
    char mtext[1024];
};
  • msgsz:表示消息结构体中,mtext最大长度
  • msgflg:一位掩码,可取值有:IPC_NOWAIT、MSG_COPY、MSG_EXCEPT、MSG_NOERROR,取值说明可见man msgsnd

 

2.3 接收消息

消息队列接收消息,主要调用msgrcv 函数

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
                      int msgflg);
  • msqid:该参数是msgget所得到的message queue 的 id
  • msgp:消息结构体
  • msgsz:可接收数据最大长度
  • msgflg:一位掩码,可取值有:IPC_NOWAIT、MSG_COPY、MSG_EXCEPT、MSG_NOERROR,取值说明可见man msgsnd

 

有了消息这种模型,两个进程之间的通信就像咱们平时发邮件一样,你来一封,我回一封,可以频繁沟通了。

 

3、共享内存

image-20220924172026172

怎么理解共享内存呢?

我们知道每个进程都有自己独立的虚拟内存空间,不同的进程的虚拟内存空间映射到不同的物理内存中去。这个进程访问 A 地址和另一个进程访问 A 地址,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。

 

但是,咱们是不是可以变通一下,拿出一块虚拟地址空间来,映射到相同的物理内存中。这样这个进程写入的东西,另外一个进程马上就能看到了,都不需要拷贝来拷贝去,传来传去。

 

相比于消息队列,共享内存的优势在哪里呢?

  • 大数据传输:如果批量的大数据进行传输,使用邮件的方式,来去发送不及时,并且大小也有限制
  • 实时性:用共享内存,其可以大大节省通信时间

 

3.1 创建共享内存

我们可以创建一个共享内存,调用 shmget。

int shmget(key_t key, size_t size, int shmflg);
  • key:和 msgget 里面的 key 一样,都是唯一定位一个共享内存的对象
  • size:共享内存的大小
  • shmflg:其值可以取:IPC_CREAT、IPC_EXCL、SHM_HUGETLB、SHM_HUGE_2MB等

返回值:共享内存的唯一ID

 

创建完毕之后,我们可以通过 ipcs 命令查看这个共享内存。

#ipcs --shmems
 
------ Shared Memory Segments ------ ­­­­­­­­
key        shmid    owner perms    bytes nattch status
0x00000000 19398656 marc  600    1048576 2      dest

 

3.2 访问共享内存

接下来,如果一个进程想要访问这一段共享内存,需要将这个内存加载到自己的虚拟地址空间的某个位置,通过 shmat 函数,就是 attach 的意思。

void *shmat(int shmid, const void *shmaddr, int shmflg);
  • shmid:标识一个共享内存段的唯一ID
  • shmaddr:就是要指定 attach 到这个地方。但是这个地址的设定难度比较大,除非对于内存布局非常熟悉,否则可能会 attach到一个非法地址。所以,通常的做法是将 shmaddr设为 NULL,让内核选一个合适的地址。
  • shmflg:一位掩码,可取值:SHM_EXEC、SHM_RDONLY、SHM_REMAP。

返回值:为所连接的实际地址

 

3.3 关闭共享内存

如果共享内存使用完毕,可以通过 shmdt 解除绑定,然后通过 shmctl,将 cmd 设置为 IPC_RMID,从而删除这个共享内存对象。

int shmdt(void *addr); 
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmdt的参数addr:为shmat的返回值,表示卸载一片共享内存

shmctl的参数:

  • shm_id:shmget的返回值,为共享内存的唯一ID
  • cmd:取值有:IPC_STAT、IPC_RMID等,见:man shmctl
  • buf:共享内存管理结构体。

 

3.4 信号量

这里你是不是有一个疑问,如果两个进程 attach 同一个共享内存,大家都往里面写东西,很有可能就冲突了。例如两个进程都同时写一个地址,那先写的那个进程会发现内容被别人覆盖了。

 

所以,这里就需要一种保护机制,使得同一个共享的资源,同时只能被一个进程访问。在 System V IPC 进程间通信机制体系中,早就想好了应对办法,就是信号量(Semaphore)。因此,信号量和共享内存往往要配合使用。

 

信号量和共享内存都比较复杂,两者还要结合起来用,就更加复杂,它们内核的机制就更加复杂。这一节我们先不讲。

 

4、信号

上面讲的进程间通信的方式,都是常规状态下的工作模式,对应到咱们平时的工作交接,收发邮件、联合开发等,其实还有一种异常情况下的工作模式。

例如出现线上系统故障,这个时候,什么流程都来不及了,不可能发邮件,也来不及开会,所有的架构师、开发、运维都要被通知紧急出动。所以,7 乘 24 小时不间断执行的系统都需要有告警系统,一旦出事情,就要通知到人,哪怕是半夜,也要电话叫起来,处理故障。

信号可以在任何时候发送给某一进程,进程需要为这个信号配置信号处理函数。

Linux所支持的异常信号如下:

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

当某个信号发生的时候,就默认执行这个函数就可以了。这就相当于咱们运维一个系统应急手册,当遇到什么情况,做什么事情,都事先准备好,出了事情照着做就可以了。

有点类似于异常中断……

OK,这一篇,我们整体讲解了一下进程间通信的几种方式,现在我们来回顾一下:

  • 类似瀑布开发模型的管道
  • 类似邮件模式的消息队列
  • 类似会议室联合开发的共享内存加信号量
  • 类似应急预案的信号
img

点赞+关注,永远不迷路

img
Linux进程间通信的方式汇总 这些通信方式各有特点,可以根据具体的应用场景和需求来选择合适的通信方式。 阅读详情

相关推荐

【WIN开发】02进程间通信方式汇总

进程间通信(IPC):让不同进程之间交换数据、互相通知的技术。打电话(Socket)递纸条(剪切板)传文件服务器(邮槽)内部通道(管道)喊一嗓子(消息)原理:通过网络IP和端口进行通信,可以在同一台电脑,也可以跨网络。// 进程A(服务器)// 进程B(客户端)特点✅ 跨网络通信✅ 稳定可靠(TCP)❌ 需要网络协议栈❌ 相对较慢适用场景:网络应用、分布式系统、客户端-服务器模式。

yy_xzz的博客 53

进程间的通信方式(六种)

直到进程 A 访问完共享内存,才会执行 V 操作,使得信号量恢复为 0,接着就会唤醒阻塞中的线程 B,使得进程 B 可以访问共享内存,最后完成共享内存的访问后,执行 V 操作,使信号量恢复到初始值 1。而且,数据会被分为一个一个的数据单元,称为消息体,消息发送方和接收方约定好消息体的数据类型,不像管道是无格式的字节流类型,这样的好处是可以边发送边接收,而不需要等待完整的数据。接着,当进程 A 生产完数据后,执行了 V 操作,就会使得信号量变为 0,于是就会唤醒阻塞在 P 操作的进程 B;...

m0_72838865的博客 1万+

从零到一:用Verilog和Quartus构建智能交通灯系统的实战指南

本文详细介绍了如何使用Verilog和Quartus Prime从零开始构建智能交通灯系统。通过分步指导,包括状态机设计、时序控制、数码管显示等核心模块实现,并结合ModelSim仿真验证,帮助FPGA初学者掌握数字电路设计的关键技术。文章还提供了实际部署到FPGA开发板的调试技巧和进阶优化方案。

weixin_29172201的博客 463

操作系统——进程间通信

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。​ 进程间通信目的一般有共享数据,数据传输,消息通知,进程控制等。以 Unix/Linux 为例,介绍几种重要的进程间通信方式:共享内存,管道,消息队列,信号量,信号​ 管道 如果你学过 Linux 命令,那你肯定很熟悉「|」这个竖线。 $ ps auxf | grep mysql 上面命令行里的「|」竖线就是一个管道,它的功能是将前一个命令(ps auxf)的输出,作为后一个命令(

zhouhengzhe的博客 9881

值得苦练的100道Python经典练手题(全网最全,附详细答案,建议收藏)

这100道Python练习题涵盖了从基础语法到高级算法、从数据库操作到Web开发的各个方面,是备考数据库系统工程师的绝佳素材。建议按照章节顺序逐一练习,遇到难点可反复钻研,真正掌握每一道题背后的知识点。通过这些练习,不仅能提升Python编程能力,还能加深对数据库系统原理的理解,为考试和实际工作打下坚实基础。

yue_yun_的博客 9315

Informer复现 -- 完整模型

有了数据和核心的ProbAttention,接下来就可以复现完整的Informer(图1)了。图1:Informer模型结构[1]如果对图1还不太熟悉的同学,可以参考图2。由图2可知,informer与Transformer之间的差异并不大。主要区别是ProbAttention和可能的encoder最后一层的conv(源代码中用来distil)。图2:参考Transformer画的Informer模型结构。

AI_daily的博客 3485

进程通信常见方式

进程通信是指进程之间的信息交换。

一个菜鸡的博客 3715

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 174

进程之间的通信

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication),或者概括一点讲就是是指在不同进程之间传播或交换信息。 进程间...

ProMonkey_chen的博客 2058

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9895

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1240

C#中进程间通信方式汇总

一、进程间通讯的方式 进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和匿名管道、发送消息等几种方法来直接完成,另外还可以通过socket口、配置文件和注册表等来间接实现进程间数据通讯任务。以上这几种方法各有优缺点,具体到在进程间进行大数据量数据的快速交换问题上,则可以排除使用配置文件和注册表的方法;另外,由于管道和socket套接字的使用需要有网卡的支持,因此也可以不予考虑。这样,可供选择的通讯方式只剩下共享内存和发送消息两种。 二、发送消息实现进程间通讯前

u011555996的博客 4886

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 900

进程间通信方式汇总

对于进程来说,进程的本质就是程序的执行过程,进程是独立运行的单位,所以不同的程序的执行就产生不同的进程,进程和进程之间,运行空间时相互独立的,以平常的方法无法实现两者之间的通信。

华清远见 | 程序员的学习天堂 592

磁悬浮分子泵:起源、现状与未来趋势深度解析

摘要 磁悬浮分子泵作为高真空获取的关键设备,通过磁悬浮技术实现转子无接触高速运转,大幅提升了真空系统的性能和可靠性。本文系统梳理了分子泵从机械轴承到磁悬浮的技术演变历程,分析了当前行业格局及主要厂商产品特性,包括爱德华兹、普发真空等国际巨头的技术优势。研究进一步探讨了磁悬浮分子泵在半导体制造、科研设备等领域的核心应用,通过数学模型揭示了其性能参数关系。最后,展望了未来在智能化、节能化等方面的发展趋势,为相关领域的技术创新提供参考。 关键词:磁悬浮分子泵;高真空技术;半导体制造;科研设备;技术发展

技术工作者 685

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android 进程间通信方式汇总及分类

进程间通信方式: AIDL:功能强大,支持进程间一对多的实时并发通信,并可实现RPC(远程过程调用) Messenger:支持一对多的串行实时通信,AIDL的简化版本。 Bundle:四大组件的进程通信方式,只能传输Bundle支持的数据类型。 ContentProvider:强大的数据源访问支持,主要支持CRUD操作,一对多进程间数据共享。 Broadcast Receiver:广播,但只能单向通信,接收者只能被动接受信息。 文件共享:在非高并发的情况下共享简单的数据。 Socket:通过网

冯旭的博客 857

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

进程间通信--所有方式汇总

1.linux进程间通信: 进程间通信在用户空间中是无法实现的,只能借助linux内核中的变量进行通信,而线程由于共享进程资源,可以通过全局变量在用户空间实现线程间通信。 2.进程间通信方式: 管道通信 信号通信 IPC(Inter-Process Communication)通信 socket通信 2.1 管道通信: 1)无名管道 2)有名管道 2.2 信号通信: 信号(通知)通信包...

yixinshark的博客 282

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[Linux]-进程间通信方式汇总

进程通过感兴趣的消息类型来接受队列中的数据,如果消息类型相同的话,还是遵循先进先出的顺序,否则不同的消息类型是不用遵守先进先出而是随机读取的。:无名管道多用于少量进程之间的通信,同时必须是存在血缘关系的进程。内存映射数据读取也是没有格式的,当在一个进程中修改映射区的数据,物理内存抽象的磁盘文件中也会被修改(可设置),也就是往里面写数据之后,数据还会继续存在。:有名管道可以用于互不相关的进程之间的通信,有名管道是半双工的,数据先进先出,进程之间一对一使用,数据也是没有格式的,所以需要规范读写数据要求。

levi的博客 212

【从浅学到熟知Linux】进程间通信之匿名管道方式(进程间通信方式汇总、匿名管道的创建、匿名管道实现进程池详解)

什么是通信?所谓通信,就是要实现两个或多个进程实现数据层面的交互。而在操作系统中,为了保持进程的独立性,不允许其他进程访问某个进程的地址空间。正因为进程独立性的存在,导致进程的通信成本比较高。(因为A进程无法直接将通信数据写入B进程的地址空间中,而需要通过在两进程外部创建某个空间来实现进程的通信,故成本较高)。为什么进程需要通信呢?①数据传输:一个进程需要将它的数据发送给另一个进程;②资源共享:多个进程之间共享同样的数据,当前进程需要将共享数据发送给需要该数据的进程;

Jammingpro 1143

unix 环境高级编程 c语言 --- 进程间通信5种方式汇总

何为进程间通信 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是"公共场所",各进程均可以访问,所以内核也可以提供这样的条件。此外,还有双方都可以访问的外设。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过"注册表"或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作"进程间通信"。 分类 1 简单进程间通

weixin_53272394的博客 793

进程间通信的8种方式

前言: 进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信...

是什么让你停止不前? 2万+

Android——进程间通信方式

1.Intent Activity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle实现了 Parcelable 接口,可以在不同的进程间进行传输。 在一个进程中启动了另一个进程的 Activity,Service 和 Receiver ,可以在Bundle 中附加要传递的数据通过 Intent 发送出去。 可以看看,Android——Bundle浅析 2. 文件共享 Windows 上,一个文件如果被加了排斥锁会导致其他线程无法对其进行访问,包括读和

Yawn 5147

进程间通信的五种方式

前言: 进程通信: 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。 进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信...

slass-mot-odet 2658

【Linux】进程间通信的几种方式总结

介绍与总结以下几种进程间通信方式: 管道: 匿名管道 命名管道 System V进程间通信 共享内存 消息队列 信号量 管道: 半双工通信(可选方向的单向传输)。 本质是内核中的一块缓冲区。 实现进程间通信的原理:让多个进程通过访问到相同的缓冲区来实现通信。管道实现通信使用的是系统调用的IO接口(这也遵循了一切皆文件的思想)。 1、匿名管道及代码实现 匿名管道只能用于具有亲缘...

swag_wg的博客 1121

进程间通信方式

管道:速度慢,容量有限,只有父子进程能通讯;FIFO:任何进程间都能通讯,但速度慢;消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题;信号:有入门版和高级版两种,区别在于入门版注重动作,高级版可以传递消息。只有在父子进程或者是共享内存中,才可以发送字符串消息;信号量:不能传递复杂消息,只能用来同步。......

记录各种Bug解决案例及日常学习内容 877
上一篇: 【Bluetooth蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译
下一篇: printf多级别、带颜色打印输出
dong__ge
dong__ge 2022年度博客之星嵌入式领域TOP 5 2022年度博客之星嵌入式领域TOP 5
博客等级 码龄5年 3万+粉丝 92原创
评论 48
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dong__ge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值