Msgsnd 消息发送|学习笔记

简介: 快速学习 Msgsnd 消息发送

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Msgsnd 消息发送】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11047


Msgsnd 消息发送

 

内容介绍:

一、发送消息

二、代码实现

 

向消息队列中添加消息

 

一、 发送消息

1.格式

#include <sys/msg.h>

int. msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg);

2.功能:

将新消息添加到消息队列。

3.参数:

msqid:消息队列的标识符。

msgp:待发送消息结构体的地址。

msgsz:消息正文的字节数。

msgflg:函数的控制属性

0: msgsnd_调用阻塞直到条件满足为止。

IPC_NOWAIT:若消息没有立即发送则调用该函数的进程会立即返回。

4.返回值:

成功:0  失败:-1

 

二、代码实现

#include <stdio.h>

#include<unsitd.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include <sys / msg. h>

#include<string.h>

typedef struct msg {//添加信息之前要定义一个结构体

long type ;       //类型名,第一个必须是长整型

char text [200];

char name [20];

}MSG;               //新结构体的类型名为 MSG

int main(int argc, char *agrv[ ])

{

key_t key; //定义一个变量 key 值

MSG m;   //定义一个结构体变量 m

int masg_id;

int ret;     //定义一个整型变量 ret

key = ftok(“.”, 1); //当前目录加一得到 key 值

if(key == -1)

{

perror(“ftok”);

return 0;

}

printf(“key= %d\n” ,key);

msg_id = msgget(key ,IPC_CREAT|0666);

printf(“msg_id = %d\n” ,msg_id);

m.type = 1;     //给结构体赋值,消息类型为 1

strcpy(m.text ,”hello world”);  //给正文内容赋值

strcpy(m.name ,”lucy”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

//向 msg_id 队列中传参数

if(ret != 0)     //如果 ret 不等于0,失败,程序结束

{

perror(“msgsnd”);

return 0;
}      //注意: m 不在列表中,m 是一个暂时的容器

m.type = 2;    // 添加第二条信息

strcpy(m.text, “hello kitty”);

strcpy(m.name ,”lilei”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

if(ret != 0)

{

perror(“msgsnd”);

return 0;
}

m.type = 3;    //添加第三条信息

strcpy(m.text, “hello china”);

strcpy(m.name ,”tom”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

if(ret != 0)

{

perror(“msgsnd”);

return 0;
}

return 0;

}

相关文章
|
Dubbo Cloud Native Java
ZooKeeper 避坑实践:由于jute.maxbuffer 设置问题导致的集群不可用
微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
ZooKeeper 避坑实践:由于jute.maxbuffer 设置问题导致的集群不可用
|
存储 Linux
Linux中的进程等待(超详细)
Linux中的进程等待(超详细)
547 1
|
Linux C++
通过C/C++代码设置Linux系统时间的方法与实例
Linux系统中的时间设置是关键任务之一,涉及日志记录、数据同步等众多应用场景。本文将详细介绍如何通过C/C++代码设置Linux系统时间,包括调用系统调用和使用第三方库,同时提供实例演示。
2817 2
|
算法 5G
【5G NR】手机身份证号IMEI与IMEISV
手机上的“IMEI”是指国际移动设备识别码(IMEI),通常称为手机序列号。它用于识别移动网络中的各个独立手机和其他移动通信设备,相当于手机身份证号,它是全球唯一的。
1550 0
【5G NR】手机身份证号IMEI与IMEISV
|
人工智能 语音技术 Android开发
|
Linux 数据安全/隐私保护 Windows
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
5012 0
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
|
9月前
|
缓存 运维 监控
解决隐式内存占用难题
本文详细介绍了在云原生和容器化部署环境中,内存管理和性能优化所面临的挑战及相应的解决方案。
828 193
解决隐式内存占用难题
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
633 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
9月前
|
安全 小程序 Java
weixin027校园二手平台的设计与实现+ssm(文档+源码)_kaic
本项目基于微信小程序开发校园二手交易平台,旨在解决大学生闲置物品交易问题。系统采用Java语言和MySQL数据库设计,支持用户浏览、收藏、评价商品及发布闲置物品。管理员可审核商品和用户信息,确保交易安全。系统具备在线搜索功能,方便用户查找商品,并提供实时沟通渠道,增强平台透明度和用户体验。该平台简化了二手交易流程,满足了大学生对便捷、高效交易的需求,具有重要的实际应用价值。
|
物联网 开发者
NB-IoT 中 PTW 和 eDRX 周期配置 | 学习笔记
快速学习 NB-IoT 中 PTW 和 eDRX 周期配置
NB-IoT 中 PTW 和 eDRX 周期配置 | 学习笔记