Linux进程间通信之POSIX消息队列

TCP Reno/CUBIC 拥塞控制算法对比:从 Tahoe 到 BBR 的 4 种核心策略演进 本文深入解析了TCP拥塞控制算法的演进历程,从经典的Tahoe、Reno到现代的CUBIC和BBR,详细对比了4种核心策略的实现机制与性能差异。通过分析拥塞窗口、流量控制等关键技术,揭示了不同算法在高带宽延迟网络中的优化方向,为网络协议栈优化提供理论依据和实践指导。 阅读详情

消息队列可认为是一个消息链表,它允许进程之间以消息的形式交换数据。有足够写权限的进程或线程可往队列中放置消息,有足够读权限的进程或线程可从队列中取走消息。每个消息都是一个记录,它由发送者赋予一个优先级。与管道不同,管道是字节流模型,没有消息边界。
本文介绍的是POSIX消息队列。POSIX消息队列与System V消息队列的相似之处在于数据的交换单位是整个消息,但它们之间仍然存在一些显著的差异。

  • POSIX消息队列是引用计数的。只有当所有当前使用队列的进程都关闭了队列之后才会对队列进行标记以便删除。
  • 每个System V消息都有一个整数类型,并且通过msgrcv()可以以各种方式类选择消息。与之形成鲜明对比的是,POSIX消息有一个关联的优先级,并且消息之间是严格按照优先级顺序排队的(以及接收)。
  • POSIX消息队列提供了一个特性允许在队列中的一条消息可用时异步地通知进程。

概述

POSIX消息队列API中的主要函数如下。

  • mq_open()函数创建一个新消息队列或打开一个既有队列,返回后续调用中会用到的消息队列描述符。
  • mq_send()函数向队列写入一条消息。
  • mq_recevie()函数从队列中读取一条消息。
  • mq_close()函数关闭进程之前打开的一个消息队列。
  • mq_unlink()函数删除一个消息队列名并当所有进程关闭该队列时对队列进行标记以便删除。

上面的函数所完成的功能是相当明显的。此外,POSIX消息队列API还具备一些特别的特性。

  • 每个消息队列都有一组关联的特性,其中一些特性可以在使用mq_open()创建或打开队列时进行设置。获取和修改队列特性的工作则是由两个函数来完成的:mq_getattr()和mq_setattr()。
  • mq_notify()函数允许一个进程向一个队列注册接收消息通知。在注册完之后,当一条消息可用时会通过发送一个信号或在一个单独的线程中调用一个函数来通知进程。


打开、关闭和断开链接消息队列

打开一个消息队列

mq_open()函数创建一个新消息队列或打开一个既有队列。

#include<fcntl.h>
#include<sys/stat.h>
#include<mqueue.h>

mqd_t mq_open(const char *name,int oflag,mode_t mode,struct mq_attr *attr);

name参数标识出了消息队列,消息队列对象的名字的最大长度为NAME_MAX(255)个字符。
oflag参数是一个位掩码,它控制着mq_open()操作的各个方面。
oflag参数的位值:

标记描述
O_CREAT队列不存在时创建队列
O_EXCL与O_CREAT一起使用,若消息队列已存在,则错误返回
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR读写打开
O_NONBLOCK以非阻塞模式打开

oflag参数的其中一个用途是,确定是打开一个既有队列还是创建和打开一个新队列。如果在oflag中不包含O_CREAT,那么将会打开一个既有队列。如果在oflag中包含了O_CREAT,并且与给定的name对应的队列不存在,那么就会创建一个新的空队列。
如果在oflag中同时包含O_CREAT和O_EXCL,并且与给定的name对应的队列已经存在,那么mq_open()就会失败。
mq_open()通常用来打开一个既有消息队列,这种调用只需要两个参数,但如果在flags中指定了O_CREAT,那么就还需要另外两个参数:mode和attr。这些参数用法如下:

  • mode参数是一个位掩码,它指定了施加于新消息队列之上的权限。这个参数可取的位置与文件上的掩码值是一样的,并且与open()一样,mode中的值会与进程的umask取掩码。要从一个队列中读取消息就必须要将读权限赋予相应的用户,要向队列写入消息就需要写权限。
  • attr参数是一个mq_attr结构,它指定了新消息队列的特性。如果attr为NULL,那么将使用实现定义的默认特性创建队列。mq_attr结构后在后面进行介绍。

mq_open()在成功结束时会返回一个消息队列描述符,它是一个类型为mqd_t的值,在后续的调用中将会使用它来引用这个打开着的消息队列。

fork()、exec()以及进程终止对消息队列描述符的影响
  • 在fork()中子进程会接收其父进程的消息队列描述符的副本,并且这些描述符会引用同样 的打开着的消息队列描述符。子进程不会继承其父进程的任何消息通知注册。
  • 当一个进程执行了一个exec()或终止时,所有其打开的消息队列描述符会被关闭。
关闭一个消息队列

mq_close()函数关闭消息队列描述符mqdes。

#include<mqueue.h>

int mq_close(mqd_t mqdes);

与文件上的close()一样,关闭一个消息队列并不会删除该队列。要删除队列则需要使用mq_unlinl(),它是unlink()在消息队列上的版本。

删除一个消息队列

mq_unlink()函数删除通过name标识的消息队列,并将队列标记为在所有进程使用完该队列之后销毁该队列。

#include<mqueue.h>

int mq_unlink(const char *name);


消息队列的特性

mq_open()、mq_getattr()以及mq_setattr()函数都会接收一个参数,它是一个指向mq_attr结构的指针。这个结构是在<mqueue.h>中进行定义的,其形式如下:

struct mq_attr

{

        long mq_flags;//阻塞标志, 0或O_NONBLOCK

        long mq_maxmsg;//最大消息数

        long mq_msgsize;//每个消息最大大小

        long mq_curmsgs;//当前消息数

};

在开始深入介绍mq_attr的细节之前有必要指出以下几点。

  • 这三个函数中的每个函数都只用到了其中几个字段。上面给出的结构定义中的注释指出了各个函数所用到的字段。
  • 这个结构包含了与一个消息描述符相关联的打开的消息队列描述的相关信息以及该描述符所引用的队列的相关信息。
  • 其中一些字段中包含的信息在使用mq_open()创建队列时就已经确定下来了(mq_maxmsg和mq_msgsize);其他字段则会返回消息队列描述或消息队列的当前状态相关信息。
在创建队列时设置消息队列特性

在使用mq_open()创建消息队列时可以通过下列mq_attr字段来确定队列的特性。

  • mq_maxmsg字段定义了使用mq_send()向消息队列添加消息的数量上限,其取值必须大于0。
  • mq_msgsize字段定义了加入消息队列的每条消息的大小的上限,其取值必须大于0。

mq_maxmsg和mq_msgsize特性是在消息队列被创建时就确定下来的,并且之后也无法修改这两个特性。

获取消息队列特性

mq_getattr()函数返回一个包含与描述符mqdes相关联的消息队列描述和消息队列的相关信息的mq_attr结构。

#include<mqueue.h>

int mq_getattr(mqd_t mqdes,struct mq_attr *attr);

除了上面已经介绍的mq_maxmsg和mq_msgsize字段之外,attr指向的返回结构中还包含下列字段。
mq_flags
这些是与描述符mqdes相关联的打开的消息队列描述的标记,其取值只有一个:O_NONBLOCK。这个标记是根据mq_open()的oflag参数来初始化的,并且使用mq_setattr()可以修改这个标记。
mq_curmsgs
当前位于队列中的消息数。这个信息在mq_getattr()返回时可能已经发生了改变,前提是存在其他进程从队列中读取消息或写入消息。

修改消息队列特性

mq_setattr()函数设置与消息队列描述符mqdes相关联的消息队列描述的特性,并可选地返回与消息队列有关的消息。

#include<mqueue.h>

int mq_setattr(mq_t mqdes,const struct mq_attr *newattr,struct mq_attr *oldattr);

mq_setattr()函数执行下列任务。

  • 它使用newattr指向的mq_attr结构中的mq_flags字段来修改与描述符mqdes相关联的消息队列描述的标记。
  • 如果oldattr不为NULL,那么就返回一个包含之前的消息队列描述标记和消息队列特性的mq_attr结构。


交换消息

发送消息

mq_send()函数将位于msg_ptr指向的缓冲区中的消息添加到描述符mqdes所引用的消息队列中。

#include<mqueue.h>

int mq_send(mqd_t mqdes,const char *msg_ptr,size_t msg_len,unsigned int msg_prio);

msg_len参数指定了msg_ptr指向的消息的长度,其值必须小于或等于队列的mq_msgsize特性,否则mq_send()就会返回EMSGSIZE错误。长度为零的消息是允许的。
每条消息都拥有一个用非负整数表示的优先级,它通过msg_prio参数指定。消息在队列中是按照优先级倒序排列的(即0表示优先级最低)。当一条消息被添加到队列中时,它会被放置在队列中具有相同优先级的所有消息之后。如果一个应用程序无需使用消息优先级,那么只需要将msg_prio指定为0即可。

接收消息

mq_receive()函数从mqdes引用的消息队列中删除一条优先级最高、存在时间最长的消息并将删除的消息放置在msg_ptr指向的缓冲区。

#include<mqueue.h>

ssize_t mq_receive(mqd_t mqdes, char *mdg_ptr,size_t msg_len,unsigned int *msg_prio);

调用着使用msg_len参数来指定msg_ptr指向的缓冲区中的可用字节数。
不管消息的实际大小是什么,msg_len必须要大于或等于队列的mq_msgsize特性,否则mq_receive()就会失败并返回EMSGSIZE错误。如果不清楚一个队列的mq_msgsize特性的值,那么可以使用mq_getattr()来获取这个值。
如果msg_prio不为NULL,那么接收到的消息的优先级会被复制到msg_prio指向的位置处。


消息通知

POSIX消息队列能够接收之前为空的队列上有可用消息的异步通知(即队列从空变成了非空)。这个特性意味着已经无需执行一个阻塞的调用或将消息队列描述符标记为非阻塞并在队列上定期执行mq_receive()调用。
进程可以选择通过信号的形式或者通过一个单独的线程中调用一个函数的形式来接收通知。

mq_notify()函数注册调用进程在一条消息进入描述符mqdes引用的空队列时接收通知。

#include<mqueue.h>

int mq_notify(mqd_t mqdes,const struct sigevent *notification);

notification参数指定了进程接收通知的机制。
有关消息的通知需要注意以下几点:

  • 在任何一个时刻都只有一个进程能够向一个特定的消息队列注册接收通知。如果一个消息队列上已经存在注册进程了,那么后续在该队列上的注册请求将会失败。
  • 只有当一条新消息进入之前为空的队列时注册进程才会收到通知。如果在注册的时候队列中已经包含消息,那么只有当队列被清空之后有一条新消息达到之时才会发出通知。
  • 当向注册进程发送了一个通知之后就会删除注册信息,之后任何进程就能够向队列注册接收通知了。当通知被发送给注册进程时,注册即被撤销,该进程若要重新注册,则必须重新调用mq_notify()。
  • 注册进程只有在当前不存在其他在该队列上调用mq_receive()而发生阻塞的进程时才会收到通知。如果其他进程在mq_receive()调用中被阻塞了,那么该进程会读取消息,注册进程会保持注册状态。
  • 一个进程可以通过在调用mq_notify()时传入一个值为NULL的notification参数来撤销自己在消息通知上的注册信息。
struct sigevent
{
    int sigev_notify;
    int sigev_signo;
    union sigval sigev_value;
    void (*sigev_notify_function)(union sigval);
    pthread_attr_t *sigev_notify_attributes;
};

sigev_notify取值:
SIGEV_NONE:事件发生时,什么也不做;
SIGEV_SIGNAL:事件发生时,将sigev_signo指定的信号发送给指定的进程;SIGEV_THREAD:事件发生时,内核会(在此进程内)以sigev_notify_attributes为线程属性创建一个线程,并让其执行sigev_notify_function,并以sigev_value为其参数

sigev_signo:在sigev_notify=SIGEV_SIGNAL时使用,指定信号类别

sigev_value:sigev_notify=SIGEV_SIGEV_THREAD时使用,作为sigev_notify_function的参数

union sigval
{
int sival_int;
void *sival_ptr;
};

sigev_notify_function:在sigev_notify=SIGEV_THREAD时使用,其他情况下置NULL
sigev_notify_attributes:在sigev_notify=SIGEV_THREAD时使用,指定创建线程的属性,其他情况下置NULL

学习十八-UJA107xA简介及移植-0 目录 1、UJA107xA系列手册 1、介绍 2.2.1 BAT引脚功能 2.4.1 V1、V2稳压器 2.5.1 CAN收发器 3.1 Startup Operation 3.2 Normal Operation 5.1 Attached Files 5.2 NXP UJA107xA Example Software 6、main() 1、UJA107xA系列手册 看完手册关于使用还是没有头绪的,只是想SPI发送指令将V2驱动起来,进而驱动起来CAN收... 阅读详情

相关推荐

RISC-V— 架构基础知识学习

蜂鸟 E200 系列是一个开源的RISC-V 处理器。蜂鸟 E200 系列由中国大陆研发团队开发,用户能够轻松与开发人员取得交流和支持。RI蜂鸟 E200 处理器研发团队拥有在国际一流公司多年开发处理器的经验,使用稳健的Verilog 2001 语法编写的可综合 RTL 代码,以工业级标准进行开发。蜂鸟 E200 的代码为人工编写,添加丰富的注释且可读性强,非常易于理解。

deilt 1万+

C语言 posix风格 mq_notify的经典示例

消息队列的初始化:程序启动时,创建或打开一个消息队列并初始化相关属性。异步通知注册:程序在启动后立即注册一个异步通知机制,确保当消息队列中有新消息时能够收到SIGUSR1信号。信号处理:当程序收到SIGUSR1信号时,调用处理函数从消息队列中获取消息,并重新注册通知以继续接收消息。当收到SIGINT信号时,程序会执行清理操作并退出。循环运行:程序在主循环中保持运行状态,等待消息的到来和信号的触发。这个程序是一个简单的 POSIX 消息队列生产者,它向指定的消息队列/mq1发送一条带有进程 ID 的消息。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1094

从FinFET到GAA:手把手解读2nm芯片制造的关键技术(含BSPDN避坑指南)

本文深入解读了2nm芯片制造从FinFET向全环绕栅极(GAA)晶体管架构演进的核心技术,并重点剖析了背面供电网络(BSPDN)的三种实现路径及其工程挑战。文章旨在帮助工程师理解技术变革的内在逻辑,并为应对2nm节点设计中的关键问题提供实用指南。

weixin_29294975的博客 292

linuxC消息队列 mq_open() mq_send() mq_receive() mq_notify()

消息队列 读和写两个进程不需要同时出现 (参考命名管道mkfifo) Linux有POSIX和System V 两种消息队列 POSIX消息队列 打开消息队列mq_open() 成功返回一个消息队列描述符 #include <fcntl.h> #include <sys/stat.h> #include <mqueue.h> mqd_t mq_open(const char* name, int oflag, mode_t mode, struct mq_at.

qq_33373173的博客 2665

深入解析Xilinx IDELAYE2在FPGA时序优化中的关键作用与实战配置

本文深入解析了Xilinx FPGA中IDELAYE2模块在时序优化中的关键作用。作为精密的信号延时微调器,IDELAYE2通过可编程的抽头延迟,有效解决高速接口中数据与时钟的相位偏差问题。文章详细阐述了其必须与IDELAYCTRL配对使用的核心机制,并对比分析了FIXED、VARIABLE和VAR_LOAD三种工作模式的实战配置方法与代码示例,为FPGA工程师提供了解决时序收敛难题的关键硬件配置指南。

pear55的博客 1183

【002】C++ 语言核心:关键字深度解析与分类指南

auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。

Lion_Long的博客 1248

定时器、sigevent结构体详解

最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。 创建一个定时器: int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid) 进程可以通过调用...

君君的博客 6073

图像算法中的 Blob 分析

在计算机视觉中,Blob 可以理解为在图像中具有相似性质(如颜色、亮度等)的像素群体。Blob 通常用作基本单元,在图像分析和处理任务中能够提取出有意义的特征。

m0_44975814的博客 2483

sigev_notify选项

SIGEV_SIGNAL:发送由evp->sigev_sino指定的信号到调用进程,evp->sigev_value的值将被作为siginfo_t结构体中si_value的值。 SIGEV_NONE:什么都不做,只提供通过timer_gettime和timer_getoverrun查询超时信息。 SIGEV_THREAD:以evp->sigev_notification_attribu

moonght123的专栏 3769

【AI智能体】Coze 数据库从使用到实战操作详解

Coze 数据库使用到实战详解

congge 5912

《囚徒健身》 六艺,十式

文章目录《囚徒健身》 六艺,十式1、六艺,十式2、优缺点3、手臂和上半身 《囚徒健身》 六艺,十式 1、六艺,十式 1、俯卧撑: 2、深蹲: 3、举腿: 4、引体向上: 5、桥: 6、倒立撑: 十式就是每个动作分拆为十个不同的动作等级,进行训练 每一式里面,又根据做的组数和个数,分成三层,初级,中级,高级 依次循序渐进,每完成上一个动作的高级,则向下一个动作前进 2、优缺点 优点 : 六个动作都是很常见的,日常的动作,不太需要依赖什么器械,随时随地都可以练习,很方便 这些动作可以覆盖到全身大部分

简简单单Onlinezuozuo 4563

Linux进程间通信之消息队列(POSIX)

✅可行: 通过发送多条消息(不同优先级)实现 1 对多❌不可行: 单条消息被多个进程同时接收(广播)💡建议: 如果需要真正的广播功能, 考虑使用共享内存 + 信号量。

荒坡_KingRumn 1523

【Android Performance】Android CPU绑核实战:从taskset到cpuset的完整调优指南

本文系统讲解Android系统中的CPU绑核(CPU Affinity)技术,涵盖用户空间的taskset命令行绑核、内核cpuset分组机制的原理与操作、进程级与线程级绑核的代码实现、以及中断绑核的底层方法。文中深入拆解CPU亲和性掩码的计算规则、各cpuset分组的默认策略差异、绑核后的验证手段及常见踩坑场景,并配有多项实操命令与C代码示例。适合从事Android系统性能调优、进程调度优化的开发者阅读。

weixin_44081096的博客 1310

linux应用 进程间通信之消息队列(POSIX)

本文阐述了进程间通信之消息队列(POSIX)的定义、应用场景、优缺点等,列举了编程中使用的接口,编写了测试用例测试相关功能。

cesheng3410的博客 2914

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

linux进程间通信的posix消息队列应用记录

attr:如果oflag指定了O_CREATE,需要设置以下attr,否则会用系统默认,比如,系统默认mq_maxmsg为3,mq_msgsize为8192;oflag:可以是O_RDONLY,O_WRONLY,O_RDWR,也可以按位或O_CREATE,O_EXCL,O_NONBLOCK等标志;name:消息队列的名称,注意,该名称中,只能有一个“/”,并且该队列,在系统中并不能显示;消息队列创建以后,该消息队列的参数已经固定,如果修改参数,只能重启系统,重新配置,才能生效;队列中消息的最大数量;

b7376811的博客 307

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux进程间通信--POSIX消息队列

Linux进程间通信--mq_send消息队列1、mq_open来创建非默认个数大小消息队列:2、获取消息队列的属性3、设置消息队列属性4、发送消息5、接收消息6、消息队列的关闭7、删除消息队列 1、mq_open来创建非默认个数大小消息队列: 函数原型 mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *...

ethan0ly的专栏 669

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

linux posix 消息队列,linux进程间通信之Posix消息队列

Posix消息队列与System V 消息队列的用法很相似,主要有以下区别:1. 对Posix消息队列的读取总是返回最高优先级的最早消息,对System V 消息队列的读取可以返回指定优先级的消息。2. Posix 消息队列允许产生一个信号或启动一个线程去向一个空队列写入一个消息,System V消息队列不可以。Posix消息队列常用函数及头文件#include 1.mqd_t mq_open...

weixin_28704565的博客 573

linux进程间通信--消息队列(POSIX 版本)

linux进程间通信–消息队列(POSIX 版本) 参考文件:man mq_overview。 由于System V消息存在一些缺点。因此POSIX标准又重新定义了一套消息队列接口。下面将详细介绍POSIX接口下的消息队列。 消息队列有如下的特点: 适用于任何进程将数据交互。 以消息为单位进行数据交互。 可以使用异步的信号通知。 POSIX消息队列的每个消息都可以设置优先级。范围为0 ~ MQ_PRIO_MAX-1。值越大优先级越高。 消息队列与系统相关的一些杂项说明: 系统会限制所有的消息队列最多可

guoweilkd的博客 1179

linux进程间通信:POSIX 消息队列

文章目录基本介绍相关编程接口编程实例 基本介绍 关于消息队列的基本介绍,前面在学习system V的消息队列时已经有过了解,linux进程间通信:system V消息队列 支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用链表方式进行消息管理。 进程之间的通信角色为:发送者和接受者 发送者: a. 获取消息队列的ID(key或者msgid) b. 将...

天行健,地势坤 894

linux进程间通信(posix消息队列)实例

详情见: http://blog.sina.com.cn/s/blog_7ae2364e010130tr.html 编译:  gcc -o consumer consumer.c -lrt gcc -o producer producer.c -lrt

zhangzhenghe的专栏 3218

Linux 进程间通信(posix消息队列 简单)实例

Linux 进程间通信(posix消息队列 简单)实例   [日期:2011-10-08] 来源:Linux社区  作者:zhangzhenghe [字体:大 中 小]         详情见: http://www.linuxidc.com/Linux/2011-10/44828.htm   编译: gcc -o consumer consumer.c -lrt

liushi558 1130

Linux进程间通信之消息队列(POSIX)实现篇

基于 2.6.12 内核, 说明 POSIX 消息队列的核心数据结构、系统调用路径及关键实现. POSIX 消息队列通过 mqueue 文件系统实现, 主要文件: 、. msg_msg (单条消息, 复用 System V 消息队列) mq_attr (用户可见队列属性) ext_wait_queue (等待队列) 系统调用路径 → → 创建或打开队列 → 返回消息队列描述符 → → 构造 并按优先级入队 → → 取出优先级最高的消息并删除 → → 关闭消息队列描述符 →

荒坡_KingRumn 1242

Linux进程间通信(IPC) Linux消息队列:讲解POSIX消息队列在Linux系统进程间通信中的应用和实践

posix消息队列的使用

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 2603

【Linux C | 进程】Linux 进程间通信的10种方式(2)

本文介绍进程间通信的五种方式:POSIX消息队列、POSIX信号量、POSIX共享内存、信号、套接字。

wkd_007的博客 1760

Linux进程间通信四 Posix 消息队列简介与示例

1. 读取的时候,buffer要足够大。 2. 需要手动mount看数据。 3. 优先级队列,可以获取优先级 参考文档 https://www.man7.org/linux/man-pages/man7/mq_overview.7.html

fuyuande的博客 4939

【Linux开发七】进程间通信|无名管道|命名管道|System V 消息队列|System V 信号量|System V 共享内存|POSIX消息队列|POSIX信号量|POSIX共享内存

进程间通信(简称IPC),指的是多个进程间进行数据交换和信息传递,在Linux系统下,每个进程都有着自己独立的地址空间和资源,想要进行通信就需要IPC机制。进程间通信目的:数据交换,资源共享,进程同步,传递消息。进程间通信的基本原理:不同的进程能访问和操作同一个内存空间。进程间通信的分类:有名管道和无名管道、System V消息队列,信号量,共享内存、POSIX 消息队列,信号量,共享内存、socket。System V和POSIX的主要区别在于System V底层使用命名空间。

2501_93649289的博客 943
上一篇: Linux进程间通信之管道
下一篇: Linux进程间通信之POSIX信号量
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值