当前位置: 首页 > wzjs >正文

临沂网站建设推广百度一下就一个

临沂网站建设推广,百度一下就一个,wordpress主题 错误,wordpress谁开发的消息队列是一种进程间通信(IPC)机制,允许不同进程通过发送和接收消息进行 异步通信。它的核心特点包括: 解耦:消息队列解耦了生产者和消费者,简化了系统设计。 持久化存储:支持将消息存储在队列…

消息队列是一种进程间通信(IPC)机制,允许不同进程通过发送和接收消息进行 异步通信。它的核心特点包括:

  • 解耦:消息队列解耦了生产者和消费者,简化了系统设计。

  • 持久化存储:支持将消息存储在队列中,保证数据不会丢失。

  • 流量控制:适用于分布式系统或需要流量控制的场景。

在 Linux 系统中,常用的消息队列实现包括 System V 消息队列POSIX 消息队列。这里将以 System V 消息队列 为例,介绍其 C 语言 API 的使用方法。


核心 API 函数 💻

1. 创建/获取消息队列
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>int msgget(key_t key, int msgflg);
  • key:队列的唯一标识符,通常通过 ftok 生成。

  • msgflg:权限标志(如 IPC_CREAT | 0666)。

  • 返回值:消息队列的 ID,失败返回 -1

2. 发送消息
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
  • msqid:消息队列 ID。

  • msgp:指向消息结构体的指针。

  • msgsz:消息数据部分的长度。

  • msgflg:标志(如 0IPC_NOWAIT)。

3. 接收消息
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
  • msgtyp:消息类型(0 表示任意类型)。

  • 其他参数与 msgsnd 类似。

4. 控制消息队列
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
  • cmd:控制命令(如 IPC_RMID 删除队列)。


消息结构体 📜

消息结构体包含一个 long 类型的消息类型字段,后跟消息数据部分:

struct msgbuf {long mtype;    // 消息类型(必须 > 0)char mtext[64]; // 消息数据(可自定义长度)
};

示例代码 📑

发送端(sender.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>
#include <string.h>struct msgbuf {long mtype;char mtext[64];
};int main() {key_t key = ftok(".", 'a'); // 生成唯一 keyint msqid = msgget(key, IPC_CREAT | 0666);if (msqid == -1) {perror("msgget");exit(1);}struct msgbuf msg;msg.mtype = 1; // 消息类型strcpy(msg.mtext, "Hello from sender!");if (msgsnd(msqid, &msg, sizeof(msg.mtext), 0) == -1) {perror("msgsnd");exit(1);}printf("Message sent: %s\n", msg.mtext);return 0;
}
接收端(receiver.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>struct msgbuf {long mtype;char mtext[64];
};int main() {key_t key = ftok(".", 'a');int msqid = msgget(key, 0666);if (msqid == -1) {perror("msgget");exit(1);}struct msgbuf msg;if (msgrcv(msqid, &msg, sizeof(msg.mtext), 1, 0) == -1) { // 接收类型为 1 的消息perror("msgrcv");exit(1);}printf("Received: %s\n", msg.mtext);// 删除消息队列if (msgctl(msqid, IPC_RMID, NULL) == -1) {perror("msgctl");exit(1);}return 0;
}

编译与运行 ⚙️

  1. 编译

    gcc sender.c -o sender
    gcc receiver.c -o receiver
    
  2. 运行

    • 先运行 发送端

      ./sender
      
    • 再运行 接收端

      ./receiver
      

关键注意事项 ⚠️

  1. 权限问题:确保 msgget 的权限标志(如 0666)允许进程访问队列。

  2. 消息类型mtype 必须为正整数,用于区分不同类型的消息。

  3. 队列持久性:即使进程退出,消息队列仍会保留,需显式调用 msgctl(IPC_RMID) 删除。

  4. 错误处理:所有 API 调用后应检查返回值,避免资源泄漏。


通过消息队列,可以实现 可靠的进程间通信,特别适用于生产者和消费者速度不匹配的场景。🚀

http://www.dtcms.com/wzjs/475071.html

相关文章:

  • 游戏评测网站怎么做如何编写一个网站
  • 众v创业营网站建设超级外链工具有用吗
  • 购物网站后台怎么做电商网站规划
  • 太原网站建设报价企业网站设计与实现论文
  • asp.net网站安装教程seo关键词优化方法
  • 速升网站长沙网络营销推广公司
  • 深圳罗湖网站制作推广链接点击器网页
  • 南阳网站建设的公司seo搜索引擎优化总结
  • 天津和平做网站哪家好域名备案查询站长工具
  • 设计网站公司长沙著名的个人网站
  • 企业网站建设专家域名购买
  • 找人做网站属于诈骗吗宝鸡网站开发公司
  • 桂林软件开发北京优化互联网公司
  • 12306网站为什么做那么差营销神器
  • wordpress+日文模块如何提高搜索引擎优化
  • 二级网站建设基本情况seo网站优化培训怎么做
  • 网站伪静态全站伪静态网络营销案例分享
  • 深圳建设交易网站seo教程seo官网优化详细方法
  • 福州网站建设案例百度移动排名优化软件
  • 网站建设属于办公费吗惠州seo计费管理
  • 了解目前网站建设情况企业网站推广公司
  • 电子商务在酒店管理网站建设深圳seo技术
  • 个人网站开发 怎么赚钱cps推广联盟
  • 网站建设最新签约长沙网络推广服务
  • 重庆网站建设推广服务seo教学
  • 中国摄影网站十大排名seo的优缺点
  • 网站后台关键词怎么设置网络营销策略的演变
  • 点卡网站怎么做培训心得体会范文大全1000字
  • 通用网站后台管理 asp.net 源码seo赚钱
  • b2c网站盈利模式首页优化公司