linux查看队列 msg,linux第10天 msg消息队列

cat /proc/sys/kernel/msgmax最大消息长度限制

cat /proc/sys/kernel/msgmnb消息队列总的字节数

cat /proc/sys/kernel/msgmni消息条目数

消息队列综合案例

//server

#include

#include

#include

#include

#include

#include

#include

#include

#define ERR_EXIT(m)

do

{

perror(m);

}

while(0);

struct msgbuf {

long mtype; /* message type, must be > 0 */

char mtext[1024]; /* message data */

};

int main()

{

struct msgbuf revbuf;

int key = 0;

int msgid = 0;

int ret = 0;

int pid= 0;

key = ftok("./", '2');

if (key < 0)

ERR_EXIT("ftok");

//获取消息队列

ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);

if (ret < 0)

{

if (errno == EEXIST) //如果消息队列已存在

msgid = msgget(key, 0666);

else

ERR_EXIT("msgget:");

}

else

msgid = ret;

//设置发送buf

memset(&revbuf, 0, sizeof(revbuf));

revbuf.mtype = 1; //接收方总是接收类型1

while (1)

{

ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), 1, 0);

if (ret < 0)

ERR_EXIT("msgrcv:");

fputs(revbuf.mtext + 4, stdout);

pid = *((int *)(revbuf.mtext));

revbuf.mtype = pid;

ret = msgsnd(msgid, &revbuf, ret, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgsnd");

}

return 0;

}

//clt

#include

#include

#include

#include

#include

#include

#include

#include

#define ERR_EXIT(m)

do

{

perror(m);

}

while(0);

struct msgbuf {

long mtype; /* message type, must be > 0 */

char mtext[1024]; /* message data */

};

int main()

{

struct msgbuf sndbuf;

struct msgbuf revbuf;

int key = 0;

int msgid = 0;

int ret = 0;

int pid= 0;

key = ftok("./", '2');

if (key < 0)

ERR_EXIT("ftok");

//获取消息队列

ret = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);

if (ret < 0)

{

if (errno == EEXIST) //如果消息队列已存在

msgid = msgget(key, 0666);

else

ERR_EXIT("msgget:");

}

else

msgid = ret;

//设置发送buf

memset(&sndbuf, 0, sizeof(sndbuf));

memset(&revbuf, 0, sizeof(revbuf));

pid = getpid(); //获取pid作为包头发出去

while (fgets(sndbuf.mtext + 4, sizeof(sndbuf.mtext), stdin) != NULL)

{

sndbuf.mtype = 1; //发送方总是发送类型1

memcpy(sndbuf.mtext, &pid, 4);

//*((int*)sndbuf.mtext) = pid; //这句话是指将sndbuf.mtext最前面四个字节指向一个int类型指针

ret = msgsnd(msgid, &sndbuf, strlen(sndbuf.mtext + 4) + 4, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgsnd");

sleep(1);

//读取

ret = msgrcv(msgid, &revbuf, sizeof(revbuf.mtext), pid, IPC_NOWAIT);

if (ret < 0)

ERR_EXIT("msgrcv:");

fputs(revbuf.mtext + 4, stdout);

memset(&sndbuf, 0, sizeof(sndbuf));

memset(&revbuf, 0, sizeof(revbuf));

}

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中 C++ main函数参数argc和argv含义及用法

Linux中 C main函数参数argc和argv含义及用法 简介 argc 是 argument count的缩写&#xff0c;表示传入main函数的参数个数&#xff1b; argv 是 argument vector的缩写&#xff0c;表示传入main函数的参数序列或指针&#xff0c;并且第一个参数argv[0]一定是程序的名称&…

c语言六位抢答器课程设计,51单片机八路抢答器课程设计

;说明&#xff1a;本人的这个设计改进后解决了前一个版本中1号抢答优先的问题&#xff0c;并增加了锦囊的设置&#xff0c;当参赛选手在回答问题时要求使用锦囊&#xff0c;则主持人按下抢答开始键&#xff0c;计时重新开始。;八路抢答器电路请看下图是用ps仿真的&#xff0c;已…

ELF文件详解—初步认识

ELF文件详解—初步认识 转自&#xff1a;https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在讲解ELF文件格式之前&#xff0c;我们来回顾一下&#xff0c;一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程&#xff0c;我们知道在C…

埃及分数问题c语言,埃及分数问题(转)

今日&#xff0c;小雨和小明来到网络中心&#xff0c;继续与刘老师讨论“数的认识”问题。刘老师说&#xff1a;“还有一种‘埃及分数’需要认识。这是一类分裂分数的思维题&#xff0c;对思维能力的训练很有价值。”小明说&#xff1a;“有意思&#xff0c;愿洗耳恭听。”刘老…

linux常用命令--开发调试篇

前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用&#xff0c;有些可以帮助了解或优化我们的程序&#xff0c;有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 转自&#xff1a;https://www.yanbinghu.com/2018/09/26/61877.html 示例程序…

简单有趣的c语言小程序,一个有趣的小程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼源码:#include #include #include #include #include HINSTANCE g_hInstance 0;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nSh…

linux下ora 01110,ORA-01003ORA-01110

Oracle 9i数据库登录时&#xff0c;提示ORA-01003&ORA-01110&#xff0c;大概意思是数据文件存储介质损坏。startup nomount,正常&#xff1b;alter database mount,也正常&#xff1b;alter database open,提示如下&#xff1a;alter database open*ERROR 位于第 1 行:ORA…

x11转发:通过ssh远程使用GUI程序

x11转发&#xff1a;通过ssh远程使用GUI程序 我们常常使用ssh服务远程操控服务器&#xff0c;大多数操作我们都可以通过命令行命令来实现。 ssh远程无法查看GUI程序 现在&#xff0c;笔者在x11-test目录下放入一张图片test.jpg&#xff0c;并通过opnencv-python写一个简单的…

操作系统引导详细过程

操作系统引导详细过程 转自&#xff1a;https://blog.csdn.net/lijie45655/article/details/89366372 就直观而言&#xff0c;我们所见到计算机启动的过程是&#xff1a;按下电脑开机键&#xff0c;系统在黑色的屏幕下打印出一些英文语句、然后进入进度条状态&#xff0c;最后…

android 自定义透明 等待 dialog,Android自定义Dialog内部透明、外部遮罩效果

Android自定义Dialog内部透明、外部遮罩效果发布时间&#xff1a;2020-09-09 03:01:41来源&#xff1a;脚本之家阅读&#xff1a;117作者&#xff1a;zst1303939801本文实例为大家分享了Android自定义Dialog遮罩效果的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下图…

对比损失的PyTorch实现详解

对比损失的PyTorch实现详解 本文以SiT代码中对比损失的实现为例作介绍。 论文&#xff1a;https://arxiv.org/abs/2104.03602 代码&#xff1a;https://github.com/Sara-Ahmed/SiT 对比损失简介 作为一种经典的自监督损失&#xff0c;对比损失就是对一张原图像做不同的图像…

android 融云浏览大图,融云 Android sdk kit 头像昵称更新机制

先申明笔者的实现方式不是唯一 也不一定是最优化的方案 如果您看到此篇博文 有不同看法 或者 更好的优化 更高的效率 欢迎在评论发表意见 融云官网点我融云头像机制相关视频详解首先跟大家说一下 kit 跟 lib 的头像机制 kit 是已经包含融云已经给开发者定制好的界面 诸如 会话界…

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. 报错信息 报错信息&#xff1a; RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates tha…

android访问重定向地址,如何从android中重定向url加载图像(示例代码)

嗨&#xff0c;我正面临这个问题我从RESTCall获取了一个URL网址是http://hck.re/kWWxUI但是当我在浏览器中检查时&#xff0c;它会重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何将此图像加载到我的imageView中我已经知道如何将毕加索…

Linux中的awk、sed、grep及正则表达式详解

Linux中的awk、sed、grep及正则表达式详解 简介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk适用于取列&#xff0c;sed适用于取行&#xff0c;grep适用于过滤。 正则表达式 首先我们来介绍一下正则表达式&#xff0c;正则表达式(regular expression)描述了一种…

android聚焦时如何给控件加边框,edittext设置获得焦点时的边框颜色

第一步&#xff1a;为了更好的比较&#xff0c;准备两个一模一样的EditText(当Activity启动时&#xff0c;焦点会在第一个EditText上&#xff0c;如果你不希望这样只需要写一个高度和宽带为0的EditText即可避免&#xff0c;这里就不这么做了)&#xff0c;代码如下&#xff1a;a…

gcc参数 -i, -L, -l, -include

gcc参数 -i, -L, -l, -include -i&#xff0c;-L&#xff0c;-l&#xff0c;-include -l和-L -l参数就是用来指定程序要链接的库&#xff0c;-l参数紧接着就是库名&#xff0c;那么库名跟真正的库文件名有什么关系呢&#xff1f;就拿数学库来说&#xff0c;他的库名是m&…

xargs 命令教程

xargs 命令教程 转自&#xff1a;http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2019年8月 8日 xargs是 Unix 系统的一个很有用的命令&#xff0c;但是常常被忽视&#xff0c;很多人不了解它的用法。 本文介绍如…

android strictmode有什么作用,Android 性能优化 之 StrictMode

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;StrictMode概述StrictMode 是用来检测程序中违例情况的开发者工具。使用StrictMode&#xff0c;系统检测出主线程违例的情况会做出相应的反应&#xff0c;如日志打…

curl 的用法指南

curl 的用法指南 转自&#xff1a;http://www.ruanyifeng.com/blog/2019/09/curl-reference.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2019年9月 5日 简介 curl 是常用的命令行工具&#xff0c;用来请求 Web 服务器。它的名字就是客户端&#xff08;client&#xf…