mqtt应用于进程间通信实例解析丨【拜托了,物联网!】

网友投稿 958 2022-05-30

前言

上一篇分享了:《简单认识认识mqtt及mosquitto》,但也只是分享了mqtt的一些概念及mosquitto的一些介绍。这不,就有读者来催更了:

这一篇我们就来分享mqtt应用于进程间通信的实例。我们沿用《例说嵌入式实用知识之JSON数据》这篇文章的综合demo来改造改造。那个综合demo的功能是这样子的:

这是以socket来作为进程间通信的方式,并且这个demo是基于Windows写的,需要包含Windows特定的头文件。

本篇笔记我们把上面这个综合demo改为:

我们用mqtt来作为进程间通信的方式,在Linux下进程测试。

先贴代码:

json_print进程源码

json_print.c:

mqtt应用于进程间通信实例解析丨【拜托了,物联网!】

json_parse进程源码

json_parse.c:

编译运行

1、编译生成json_parse、json_print程序:

gcc cJSON.c json_parse.c -L ../mosquitto/build/lib -lmosquitto -o json_parse gcc cJSON.c json_print.c -L ../mosquitto/build/lib -lmosquitto -o json_print

这里用到链接动态库的方式生成可执行程序。关于动态链接与静态链接,可查看往期笔记:《静态链接与动态链接补充(Linux)》、《什么是动态链接与静态链接?》。

2、执行json_parse、json_print程序:

执行这两个程序会报错:

./json_parse: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory /json_print: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

这是因为 不能找到共享库文件libmosquitto.so.1,加载失败。

因为一般情况下Linux会在/usr/lib路径中搜索需要用到的库,而libmosquitto.so.1库并不在这个路径下。

解决方法有两种:一种就是把这个文件拷贝至/usr/lib路径下,但是一般不允许这样做,一般用户也不允许往这个路径里拷贝东西。另一种就是把libmosquitto.so.1库所在路径增加为动态库的搜索路径,命令为:

export LD_LIBRARY_PATH=../mosquitto/build/lib:$LD_LIBRARY_PATH

关于这方面的说明可以阅读往期笔记:《静态链接与动态链接补充(Linux)》

按照上述方法添加动态库搜索路径之后就可以正常运行这两个程序:

ParseResult.txt文本里得到:

实验成功!

以上就是本次的分享,代码写得比较仓促,如有错误,麻烦指出,谢谢!由于准备demo花了挺多时间,包括注释也写了很多。所以本篇文章就不做过多的说明,感兴趣的朋友可以结合本篇文章的demo及mosquitto/client/pub_client.c、mosquitto/client/sub_client.c这两个源文件。

本篇文章的demo:

可在本公众号聊天界面回复关键词:json_mqtt_demo,即可获取,若无法获取可联系我进行获取。

【拜托了,物联网!】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/299476

IoT MQTT 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:「免费开源」基于Vue和Quasar的crudapi前端SPA项目实战之用户登录(二)
下一篇:华为云大前端第三阶段技术学习收获总结
相关文章