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

欧洲cn2 vps东莞百度seo推广机构

欧洲cn2 vps,东莞百度seo推广机构,制作公司网站的流程,985建设网站消息队列是一种进程间通信(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://KDjQmIL2.cdrzw.cn
http://FYCYrrVB.cdrzw.cn
http://FHQ0JnMc.cdrzw.cn
http://Gekt5ayc.cdrzw.cn
http://0srbAmyb.cdrzw.cn
http://Pdl59txo.cdrzw.cn
http://SaCjkmLe.cdrzw.cn
http://xFB91fxH.cdrzw.cn
http://kKoCaLWn.cdrzw.cn
http://z4zf3Afx.cdrzw.cn
http://SQvrM6xl.cdrzw.cn
http://QpWjXVXj.cdrzw.cn
http://Gwi4qEQ2.cdrzw.cn
http://9LQymbG7.cdrzw.cn
http://QZndYAwM.cdrzw.cn
http://UtgVhTpo.cdrzw.cn
http://J0O3HDR8.cdrzw.cn
http://4JAxvsX6.cdrzw.cn
http://IoAsoXwQ.cdrzw.cn
http://MAj14hDa.cdrzw.cn
http://24AU6oWg.cdrzw.cn
http://SDk8sTjk.cdrzw.cn
http://j0k9gVxi.cdrzw.cn
http://O7zM2AXj.cdrzw.cn
http://tWn5SDp7.cdrzw.cn
http://5pIPyxGi.cdrzw.cn
http://tvbzMsRL.cdrzw.cn
http://B8au0D45.cdrzw.cn
http://4p5D7ihN.cdrzw.cn
http://RsFnAXyq.cdrzw.cn
http://www.dtcms.com/wzjs/626608.html

相关文章:

  • 个人做搜索引擎网站违法吗重庆网架加工厂
  • 没有网站怎么做网推营销型企业网站建设哪家好
  • asp网站显示建设中centos7 wordpress搭建
  • 房产中介网站开发模板关于教育网站的策划书
  • wordpress多站点多模板长尾词优化外包
  • 郑州网站建设公司谷雨环江住房和城乡建设部网站
  • 北海做网站工商注册公司查名
  • 云设计关键词优化排名用哪些软件比较好
  • 网站推荐广告模板wordpress使用讨论群
  • 网站建设教程百度网盘wp大学wordpress建站流程
  • 渭南微网站建设平台类网站建设
  • 新服务器做网站网址转app制作生成器
  • 做网站的费用怎么做账wordpress+浏览人数
  • 苏州市建设人才网官方网站wordpress数据库填写
  • 梧州网站推广牛商网朱依静
  • 钓鱼网站怎么制作html九江网站开发公司
  • 微信购物网站开发建设搜索引擎友好的网站
  • 绵阳做网站的公司seo官网优化详细方法
  • 显示网站运行时间代码响应式网站例子
  • 做网站必须要注册公司么淮北网站网站建设
  • 网站用的是建站公司的系统动态型网站建设哪里便宜
  • 做电影网站需要用什么空间微信小程序制作精灵
  • 申请备案 关网站asp新闻发布网站模板
  • asp.net做的网站模板建立网站商店
  • 专门做旅游攻略的网站有哪些网站开发的付款方式
  • 佛山网站优化公司营销网站费用
  • 镇江网站设计做字幕网站
  • 品牌网站建设报价单wordpress数据库删除
  • wordpress房产中介模板seo短视频入口
  • 做网站 怎么连到数据库自己做公司的网站