自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 github配置ssh钥匙

首先我们在linux下看看是否生成了密钥,cd ~/.ssh如果显示没有这个目录表示没有生成ssh钥匙,这时候我们可以重新生成一个密钥如果由这个目录看一下有没有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub之类成对的文件),有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,甚至连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供,然后输入这个命令ssh-keygen -t r

2020-08-28 11:59:54 400

原创 虚拟机能够ping通主机,主机不能够ping通虚拟机,在nat模式下的解决办法

首先我们打开虚拟机找到虚拟机的ip地址ifconfig然后打开(网络和inter设置)修改VM8的设置点击确定后,还需要特别注意的是,右键VM8点击禁用再重启就ok了,这样就可以互相通信了,也就可以使用远程登陆了。...

2020-08-25 13:15:44 290

原创 修改配置文件所用的iniparser库

iniparser的下载我们可以选择从github中直接下载源码git clone https://github.com/ndevilla/iniparser源代码代码都在src文件,我们需要用的时候直接拷贝到我们的项目即可。iniparser的API介绍dictionary.h里面声明了一些直接解析ini file的API,iniparser.h里面声明了一些提供用户操作的API。iniparser.h里面的API是对dictionary.h里面API的再次封装,以提供用户友好性,所以我们一

2020-08-01 17:53:21 545

原创 使用mosquitto函数实现与EMQX的发布和订阅

前面几个博客我们已经将这些基础都已经准备好了,接下来只需要简单的编程就可以实现了首先我们创建一个结构体typedef struct broker_sub_s{ char host[64]; int port; char username[32]; char passwd[64]; char clientid[64]; char subTopic[64]; int subQos;

2020-07-25 00:45:47 1550 1

原创 EMQX开启用户和密码的连接

EMQX默认情况下是不需要用户名和密码就能够连接的话,也就是匿名登陆,这样安全性就不怎么好了,管理也比较困难,所以我们应该要设置用户名和密码。首先我们要停止EMQX代理服务器,./emqx stop然后修改用户密码配置文件,具体的文件位置看下载的地方下面是我存放的地方cd ~/download/emqx/etc/plugins然后打开配置文件vim emqx_auth_username.conf然后添加自己设置的用户名和密码,下面的加密算法任意选择然后我们要关闭匿名登陆,返回到上面位

2020-07-24 22:53:10 9128 2

原创 EMQX的使用

前面的博客介绍了如何安装EMQX,这边博客将介绍EMQX的简单使用,主要是介绍EMQX的web端的图形化界面,至于利用命令行接口大家可以查看官方提供的命令行接口。链接:https://docs.emqx.io/broker/latest/cn/development/protocol.html#mqtt-sn-%E5%8D%8F%E8%AE%AE安装好程序后,我们可以进入到它的bin目录,./emqx start现在EMQX程序已经打开,这时候我们可以区web端查看,注意你的虚拟机或者是树莓派等

2020-07-24 17:23:53 11989 2

原创 认识mosquitto的一些API函数

普通函数int mosquitto_lib_init( void )必须在任何其他mosquito函数之前调用。此函数不是线程安全的。也就是说mosquitto要第一个使用,返回值总是MOSQ_ERR_SUCCESSstruct mosquitto *mosquitto_new( const char * id, bool clean_session, void * obj )创建一个新的客户端实例,第一个参数id为客户端的clientid,第二个参数设置为true指示代理在断开连接时清除

2020-07-24 16:01:34 4050 1

原创 c语言编写分级别打印的日志系统 linux环境

宏定义的实现这个日志系统我是通过宏定义来进行分级别打印的,为什么选择在编译前实现分级别,而不是在编译后用函数接口来实现分级别打印的。两者各有各的优点,前者能够带来比较好的效率,级别的比较都是通过预处理来执行的,这样在运行过程中会省下一部分时间,然而如果使用第二种是不是一但需要的打印的东西多了,程序就要不断的调用函数,这样显然浪费很多时间,但是这样比较便捷灵活,各有各的好处。首先我们要了解宏定义以及##粘合剂和可变变参宏__VA_ARGS__,相信大家的对于宏定义的基本用法大概都知道,这里我们将了解下##

2020-07-22 16:32:46 1439 1

原创 EMQX的安装

下面所介绍的是EMQX的broker级别,以下的内容大都是参考官方网站https://docs.emqx.io/broker/latest/cn/简介EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。MQTT 是轻量的 (Lightwei

2020-07-21 13:38:09 1457

原创 MQTT协议简单了解 MQTT报文解析

简介MQTT是一个轻量的发布订阅模式消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用设计。

2020-07-21 01:37:25 2220

原创 Makefile的简单使用

简介一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些 文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell 脚本一样,其中也可以执行操作系统的命令。Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不 能算是一个合格的专业程序员。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个

2020-07-20 17:40:40 153

原创 linux ubuntu 常见的安装和卸载命令

apt-get方式普通安装sudo apt-get install softname修复安装,-f自动修复依赖sudo apt-get -f install softname重新安装sudo apt-get --reinstall install softname移除式卸载,移除软件包,当包尾部有+时意为安装sudo apt-get remove softname清除式卸载,同时清除配置sudo apt-get --purge remove softname或者sudo a

2020-07-20 00:06:16 154

原创 插入排序

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。

2020-07-19 14:56:41 88

原创 选择排序

选择排序是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。选择排序是

2020-07-19 14:37:52 87

原创 冒泡排序

最近想来总结下自己所学的一些基本的排序算法,冒泡排序可谓是个老掉牙的话题了,基本上每个人大学第一学期学习c语言的时候,老师都会将到。作为初学者的话还是想记录下自己学习的日常。冒泡排序是一种很直观的排序算法,这种算法需要不断的比较相邻的两个数,如果它们的顺序错误就将它们交换位置算法步骤:比较相邻的元素。如果第一个比第二个大(或小,看你按什么顺序排序,大的话为小到大排序,反之),就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元

2020-07-19 13:19:29 102

原创 Valgrind memcheck检测内存泄漏的简单使用

Valgrind的简介Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。Valgrind这个名字取自北欧神话中英灵殿的入口。Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O’Reilly开放源代码奖。Valgrind遵守GNU通用公共许可证条款,是一款自由软件。Valgrind可使用任何语言编写的程序。因为Valgrind直接与程序二进制文件一起使用,所以它可以与以任何编程语言编写的程序一起使用

2020-07-18 16:40:59 658

原创 cjson解析和打包

一、jsonJSON(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON的基本数据类型:数值:十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e或者E表示指数部分。

2020-07-16 02:01:14 2081 1

原创 树莓派linux下载安装mosquitto并实现和阿里云的通信

一、mosquitto的安装我们通过下载mosquito的源码进行编译安装,输入以下的命令wget http://mosquitto.org/files/source/mosquitto-1.6.9.tar.gz然后输入命令tar -xzvf mosquitto-1.6.9.tar.gz然后进入所解压的文件夹我们可以查看到配置文件config.mk,其中包含了所有Mosquitto的安装选项,详细的参数说明如下:# 是否支持tcpd/libwrap功能. #WITH_WRAP:=yes

2020-07-14 13:40:38 1128

原创 树莓派通过I2C从SHT30传感器获取温湿度

一、树莓派的基本设置首先我们得了解树莓派外部gpio口然后拿出我们sht30传感器,杜邦线,一一对应连接好树莓派的gpiosht30的vcc对应树莓派的1号口pwrsht30的gnd对应树莓派的6号口gndsht30的sda对应树莓派的3号口sdasht30的scl对应树莓派的5号口sht30传感器是i2c通行的,所以我们还必须将树莓派的i2c接口打开sudo raspi-config上下方向键选择编号,左右方向键选择下面两个,我们选择第5个interfacing options

2020-07-13 01:47:01 2337

原创 使用MQTT协议上报阿里云

开始我们先进入阿里云官网,登陆好我们注册的账号,然后选择进入下面的页面然后,进入到这个页面接下来,我们将创建一个新的产品,名字为test的产品,直接选择添加设备,或者在左边的设备里面选择相应的产品添加设备。接下来完成相应的设备设置。这时候我们将看到新创建的产品和它的设备。接下来我们将设置产品的功能这样我们就可以设置该产品的功能了这里我选择的是下面的着个功能来进行测试的,因为这个功能能有个选项是能够进行设置,这里我将添加第二个功能,这样就能够为后面的步骤提供说明,为何选

2020-07-11 01:22:50 1600 1

原创 串口通信

串口一、并行通信和串行通信1、串行通信2、并行通信二、同步通信和异步通信1、同步通信2、异步通信三、串口1、了解什么是串口2、串口的几个标准3、串口的通信协议一、并行通信和串行通信1、串行通信串行通信技术,是指通信双方按位进行,遵守时序的一种通信方式。串行通信中,将数据按位依次传输, 每位数据占据固定的时间长度,即可使用少数几条通信线路就可以完成系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用一条数

2020-07-06 15:28:22 3884

原创 linux中如何在c程序判断一个程序是否运行

大家注意的是,下列命令中显示只是得出进程信息中的一部分再linux中我们对于判断一个进程是否正在运行,再bash中还是很好解决的,这时我们可以用ps命令来查看各个进程的状态。下面时自己常用的一些ps的选项。ps a 显示现行终端机下的所有程序,包括其他用户的程序很显然这不是所有系统中的进程,这时候我们可以用ps -e 或ps -A(这两个命令的效果一样),如果我们需要看到进程的全部信息...

2020-04-28 17:08:45 4874

原创 vim自动整理格式

普通模式下:1,gg 跳转到第一行2,shift+v 转到可视模式3,shift+g 全选4,按下 =

2020-04-11 23:35:52 1133

原创 多线程的socket编程

文章目录一、线程二、流程图三、详细说明1、创建线程2、pthread_creat()三、示例代码一、线程上次我们聊到了多进程的编程,对于一台主机运行一个进程是需要耗费很多系统资源,这时候我们就可以选择多线程来解决问题。,线程是进程的一条执行路径。线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进 程,但却可以看作是Unix进程的表亲,所有的线程都是在同一进程空间运行,这也意味着多条线...

2020-03-24 22:31:50 598

原创 创建实现多进程的socket

一、引言上次学了如何创建socket的客户端和服务器,但是我们会发现一个问题,这样写出来的程序只能处理一对一的服务,当然这对客户端来说或许并没有很大的问题。但是对于服务器来说这样取并不是很靠谱,因为通常来说服务器一般需要处理多个客户端的请求,这是一种一对多的模型,所以我们学用引入一种进程来支持同时处理多个客户端的连接。二、进程的简介正在运行的程序及其占用的资源(CPU、内存、系统资源等)叫做...

2020-03-18 22:41:51 499

原创 计算机网络的基础知识

文章目录一、计算机网络模型二、物理层三、数据链路层三、网络层1、IP协议2、ARP/RARP协议1、路由协议四、传输层1、TCP/UDP2、TCP三路握手3、TCP四次挥手一、计算机网络模型如今绝大多数网络都使用的是TCP/IP协议,所以我们学习的重点就是TCP/IP协议。下面便来看一下各层的大概功能:每层都有着自己的功能,各自之间互不干涉,这样便能高速准确的传递信息。下面我们将对TCP...

2020-03-16 00:12:46 134

原创 linux服务器socket编程

文章目录一、socket介绍二、创建socket服务器的流程三、函数的介绍与运用。1、bind2、listen3、accept四、一、socket介绍如今社会是万物互联的时代,因此网络成为了最为关键的部分。人能通过人的大脑根据人的外貌特征来准确的区分。那么计算机是怎么识别计算机的呢,这时我们需要给它门一个身份来确定。网络层的“ip地址”能够识别网络中的唯一主机,“端口”能够确定主机中的唯一进程...

2020-03-14 23:41:50 257

原创 linux中客服端创建socket进行网络通信,struct sockaddr_in的布局

文章目录一、socket介绍二、创建socket客户端的流程三、各函数的介绍与运用1、socket2、connect3、write4、read5、close四、源代码一、socket介绍如今社会是万物互联的时代,因此网络成为了最为关键的部分。人能通过人的大脑根据人的外貌特征来准确的区分。那么计算机是怎么识别计算机的呢,这时我们需要给它门一个身份来确定。网络层的“ip地址”能够识别网络中的唯一主...

2020-03-14 17:33:29 482

原创 二进制平行转换算法求含1的个数

此算法求二进制含一的个数:int BitCount4(unsigned int n){n = (n &0x55555555) + ((n >>1) &0x55555555) ;n = (n &0x33333333) + ((n >>2) &0x33333333) ;n = (n &0x0f0f0f0f) + ((n >...

2020-02-25 00:14:39 295

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除