自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NMEA 语句解析

NMEA 语句详解

2024-04-10 11:23:43 295

原创 sync fsync fdatasync 三者的区别

UNIX 系统提供了sync、fsync和fdatasync三个函数。

2022-12-13 16:47:07 652 1

原创 Jenkins 环境变量

jenkins 环境变量

2022-08-02 15:04:37 2151

原创 git 提交整个文件夹所有文件

git add 提交文件夹下的所有文件包括子文件(夹)

2022-07-11 11:40:24 9351

原创 ln 硬链接和软链接

ln 软硬链接详解,软硬链接之间的区别

2022-06-16 20:00:29 552

原创 MQTT 遗嘱消息(Will Message)发布

MQTT遗嘱消息,什么时候订阅者会收到代理服务器发布的遗嘱消息?以下四种情况: 1.服务端发生了I/O 错误或者网络失败; 2.客户端在定义的心跳时期失联; 3.客户端在发送下线包之前关闭网络连接; 4.服务端在收到下线包之前关闭网络连接。正常状态下发布者断开MQTT连接,AT+MQTTDISCONN,正常关闭MQTT链路,设置的遗嘱消息是不会被代理服务器发布出去的,......

2022-06-07 09:31:59 2855

原创 find 指令

参数起始目录:查找文件的起始目录。实例根据文件或者正则表达式进行匹配列出当前目录及子目录下所有文件和文件夹find .在/home目录下查找以.txt结尾的文件名find /home -name "*.txt"同上,但忽略大小写find /home -iname "*.txt"当前目录及子目录下查找所有以.txt和.pdf结尾的文件find . \( -name "*.txt" -o -name "*.pdf" \)或find . -name "*

2022-05-06 14:47:55 230

原创 编译头文件 ““与<> 的区别

“”和<>的区别:1. 引用的头文件不同#include< >引用的是编译器的类库路径里面的头文件。#include“ ”引用的是你程序目录的相对路径中的头文件。2. 用法不同#include< >用来包含标准头文件(例如stdio.h或stdlib.h).#include“ ”用来包含非标准头文件。3. 调用文件的顺序不同#include< >编译程序会先到标准函数库中调用文件。#include“ ”编译程序会先从当前目录中

2022-05-06 10:28:37 2216

转载 #pragma pack (n)使用详解

在缺省情况下,编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行了优化,比如:如下结构体struct s{char ch;int i;};虽然变量ch本身只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员i的地址能够被4整除。因此实际占用的是8个字节,sizeof(s) = 8。一般地,可以通过下面的方法来改变缺省的对界条件:使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。使用伪指令#pragma pack.

2021-08-26 16:45:35 1469

原创 MQTT异常断开

MQTT异常断开,讨论一下TCP链路的影响MQTT异常断开,TCP链路原因的几种情况:三种情况:1、客户端MQTT发送了心跳包,但是MQTT代理服务器没有收到心跳包,所以MQTT代理服务器也就不会回复心跳响应包。TCP层出现网络故障,客户端发起链路重置;2、客户端发送了MQTT心跳包,但是TCP网络的原因没有发给代理服务器,代理服务器设置MQTT心跳,1.5T没有收到心跳包,将踢掉MQTT连接3、客户端MQTT,给MQTT代理服务器发送TCP层的ACK确认包,代理服务器没有收到TC.

2021-08-26 11:30:52 24185 2

原创 MQTT Qos降级(三)

基于标准MQTT 3.1版本MQTT Qos服务质量等级降级的情况服务端可以授予比订阅者要求的低一些的QoS等级。为响应订阅而发出的消息的有效载荷的QoS必须是原始发布消息的QoS和服务端授予的QoS两者中的最小值。如果原始消息的QoS是1而被授予的最大QoS是0,允许服务端重复发送一个消息的副本给订阅者。...

2021-07-01 11:44:29 635

原创 MQTT安全(非规范)

5.1 概述本章的内容仅供参考, 是非规范化的。 然而, 强烈推荐提供TLS的服务端实现应该使用TCP端口8883( IANA服务名: secure-mqtt) 。解决方案提供者需要考虑很多风险。 例如:设备可能会被盗用 客户端和服务端的静态数据可能是可访问的( 可能会被修改) 协议行为可能有副作用( 如计时器攻击) 拒绝服务攻击 通信可能会被拦截、 修改、 重定向或者泄露 虚假控制报文注入MQTT方案通常部署在不安全的通信环境中。 在这种情况下, 协议实现通常需要提供这些机制:

2021-06-30 17:15:16 1026

原创 C语言编译常见警告

declared implicitly 隐式声明subscript out of range 下标超出范围argument of type "UINT8 *" is incompatible with parameter of type "const char *" 类型为“UINT8*”的参数与类型为“const char*”的参数不兼容expression must be a modifiable lvalue 表达式必须是可修改的左值st...

2021-06-24 11:33:42 13727

原创 select 函数详解

Unix系统下解释:函数原型:intselect(int maxfdp, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);select函数的主要用途是什么?select函数是一个监控函数,用来监控插口的状态!插口就是指的是文件描述符,Unix / Linux一切皆文件。select函数能够监控插口状态,如下表:具体解释select的参数:先解释第五个参数(最后一个参数):st.

2021-04-23 10:57:33 6066

转载 TLS(传输层安全)协议

TLS协议概述学习了TLS协议的一些基本原理和实现,想将它分享出来,也看看我是否是学到了精髓,我尽量表述清楚,如果 有不对的地方请大家评论批评指正。TLS协议基础  TLS通过建立安全连接实现数据在两个应用进程之间的安全传输过程,能够实现双向身份鉴别、保证数据的完整性和保密性。TLS的前身是安全接口层SSL,所以也常写成SSL/TLS关于TLS的发展,我觉得了解一个协议的发展背景和发展历史也是作为安全人士的一种素养,所以不了解的同志还是可以去百度一下。  TLS协议结构如图所示:  在整

2021-04-22 11:01:19 1375

转载 SSL/TLS协议详解及区别

SSL/TLS协议详解及区别SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。SSL ...

2021-04-19 13:54:29 1148

原创 shell 四种循环详解

shell脚本中,for循环很重要,对一系列值进行迭代时非常有用。Bash中提供了多种类型的循环。面向列表的for循环个人理解这个是shell 最基本的循环,面向列表在集合中查找处理for var in listdocommands; #使用变量$vardonelist 可以是一个字符串,也可以是一个值序列(就是一个集合)。可以使用echo命令生成各种值序列:echo {1...50}; #生成一个从1~50的数字序列echo {a...z} {A...Z};...

2021-03-29 15:07:55 996

原创 shell if 对字符串的判断

三、字符串判断[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;[ STRING1 == STRING2 ] 如果两个字符串相同则为真 ;[ STRING1 != STRING2 ] 如果字符串不相同则为真 ;[ STRING1 ] 如果字符串不为空则为真,与-n类似...

2021-03-29 14:28:33 18906 3

原创 MQTT心跳 Keep Alive

简介在建立连接的时候,我们可以传递一个 Keep Alive 参数,它的单位为秒,MQTT 协议中约定:在 1.5*Keep Alive 的时间间隔内,如果 Broker 没有收到来自 Client 的任何数据包,那么 Broker 认为它和 Client 之间的连接已经断开;同样地, 如果 Client 没有收到来自 Broker 的任何数据包,那么 Client 认为它和 Broker 之间的连接已经断开。PINGREQPINGREQ 数据包没有可变头(Variable header)和消息体(

2021-03-19 18:00:11 8994 3

原创 open read write lseek写大文件的操作

头文件#<sys/types.h>#<unistd.h>#include <fcntl.h>#include <stdio.h>三个系统接口,read,write,lseek准备阶段: openint fd = open(“filename”,O_RDWR),O_RDWR为文件打开模式,具体查询open()的man手册。注:fd为文件文件描述符,使用<fcntl.h>中的open()获得读文件: read写文件: wr.

2021-03-18 10:45:19 594

原创 关于errno的判断

很多库函数,特别是那些与操作系统相关的,当执行失败时,需要对errno的值进行判断,判断程序是否执行失败。下面的代码利用对errno的判断,进行错误处理,似乎在清楚明白不过了,然而这却是错误的!/* 库函数调用 */if(errno){ /* 错误处理 */}出错原因在于,在库函数调用没有失败的情况下,并没有强制要求库函数一定要设置errno为0,这样errno的值就可能是前一个执行失败的库函数设置的值。下面的代码更正了一下,似乎能够工作,可惜还是错误的!errno = 0;

2021-03-17 17:56:16 685 4

原创 linux 堆栈——内存泄漏

内存泄漏有些进程并不需要管理他们的动态内存的使用。当需要时,它们简单地通过分配来获得,从来不用担心如何释放内存。这类程序包括编译器和其他一些运行一段固定的(或有限的)时间然后终止程序。当这种类型的程序终止时,所有内存都会被自动化回收。细心检查每一块内存是否需要回收纯属浪费时间,因为它们们(指前面说到的那些进程、应用程序)不会在被使用。其他程序的生存时间要长一点。有些工具如日历管理器、邮件工具,以及操作系统本身经常需要数日设置数周运行,并需要管理动态内存的分配和回收。由于C语言通常并不使用垃圾收集器(

2021-03-16 10:37:58 944

原创 lseek函数用法

lseek函数:#include <unistd.h>off_t lseek(int fd, off_t offset, int whence); 返回值:若成功,返回新的文件偏移量;若失败,返回-1可以调用lseek显示地为一个打开文件设置偏移量。每个打开的文件,都有一个与其相关的“当前文件偏移量”(current file offset)...

2021-03-12 14:27:30 4913

原创 linux 进程数据段与堆栈空间的关系

系统进程内部的内存布局是怎样的呢?数据段,程序段,堆空间是如何分配的?先从进程的数据段开始就像堆栈段能够根虎需要自动增长一样,数据段也包含了一个对象,用于完成这样工作,这就是堆(heap),如下图显示。堆区域用于动态分配的存储,也就是通过malloc(内存分配)函数获得的内存,并通过指针访问。堆中的多有东西都是匿名的——不能按名字直接访问,只能通过指针间接访问。从堆中获取内存的唯一方法就是:通过调用malloc(以及同类的calloc、realloc等)库函数。calloc函数与mal

2021-03-10 18:00:56 309 4

原创 write函数返回值的思考

/*Begin: add by yanhaifeng in 2021.02.04 for Abnormal disconnection after TCP connection*/ret = write(fd, buf + len_sent, len - len_sent);l_error = errno;nwy_Printf("write return:%d,errno:%d", len_sent, l_error);if (ret > 0){ len_s...

2021-03-08 16:00:32 4273

原创 shell 重定向总结

/dev/null 2>&1这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。/dev/null这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。2>&1这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的

2021-03-08 11:43:15 195

原创 MQTT Qos杂谈(二)

基于标准MQTT协议3.1版本MQTT Qos消息服务质量等级,订阅端与发布端不相等的情况Qos服务等级:Qos = 0必须准守的规范1、对于Qos 0的消息,发布者发布消息时,DUP标志位必须设置为0;2、Qos等于0的PUBLISH报文,不能包含报文标识符;3、如果遗嘱标志设置为0,遗嘱Qos也必须设置为0;Qos = 1的规范1、发布者发布消息时,PUBLISH对应的必须是3、如果遗嘱标志设置为1,遗嘱的Qos可以等于0,1,2。但是不能为其...

2021-03-05 11:01:13 478 2

原创 read函数返回值的思考

read函数返回值思考

2021-02-22 20:17:00 2585 1

原创 MQTT建立连接时TCP重传

MQTT连接是发生了TCP重传,重传connect ack这个包测试实验步骤:1、设置MQTT参数2、建立MQTT连接3、发布MQTT主题消息问题是出在第二步,建立MQTT连接时发生了TCP重传,即发布者向代理服务器发送的connect ack 数据包的TCP层确认包(TCP ack),代理服务器没有收到。然后代理服务器认为发布者没有与代理服务器建立连接。...

2021-02-22 19:57:23 1229 2

转载 RSRP RSRQ RSSI SNR的定义

链接:https://www.jianshu.com/p/1dc26435e022来源:简书在3GPP的协议中,参考信号接收功率(RSRP),定义为在考虑测量频带上,承载小区专属参考信号的资源粒子的功率贡献(以W为单位)的线性平均值,是LTE的关键指标。通俗的理解,是在Symbol承载参考信号的所有RE(资源粒子)上接收到的信号功率的平均值。RSRP单位是: dBm。 **反映的是本小区有用信号的强度** 。RSRPRSRP (Reference Signal Receiving ..

2021-02-01 11:42:01 4174

原创 shell case语句多分支判断

#!/bin/bashecho "sleep begin 1s"sleep 1case $1 in ALL) echo "I will do ALL" ;; all) echo "You will do all" ;; -c|--clean) echo "I will clean all my work" ;; linux-quic) echo " linux-quic...

2021-01-26 20:34:50 701

原创 linux 管道关闭无用的读取端

#include <unistd.h>#include <sys/types.h>#include <signal.h>#include <fcntl.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>void signal_handler(int signo);int main(){.

2021-01-18 20:26:28 836

原创 指针数组越界的思考

#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_LENGTH 1024int main(int argc, char *argv[]){ int i = 0; char *p = NULL; char buf[MAX_LENGTH] = {0}; memset(buf, 0, sizeof(buf)); for(...

2021-01-18 15:22:37 1442

原创 MQTT Qos详解(一)

MQTT Qos的理解

2021-01-14 14:43:08 20648 5

原创 xargs 与 find cp等指令的结合

xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一

2021-01-11 14:51:46 3307

原创 linux 管道关闭无用的写入端

#include <unistd.h>#include <sys/types.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ int pipe_fd[2]; pid_t pid; char r_buf[4096]; char w_buf[4096]; .

2021-01-09 17:31:23 860

转载 shell if判断

链接地址:https://blog.csdn.net/zhan570556752/article/details/80399154Shell 语言中的if条件一、if的基本语法:if [ command ];then符合该条件执行的语句elif [ command ];then符合该条件执行的语句else符合该条件执行的语句fi二、文件/文件夹(目录)判断[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。[ -c FILE ] 如果 FIL...

2021-01-08 14:37:09 175

原创 sscanf 函数与正则表达式

#include <stdlib.h>#include <stdio.h>#include <string.h>int main(){ int time_out = 0; int range = 0; int i = 0; char string_1[100] = "cai.xiaoming:[email protected]/share/save"; char string.

2021-01-07 17:33:19 1585

原创 vim 修改注释颜色 tab键

vim修改注释颜色编辑 vim ~/.vimrc添加:hi Comment ctermfg=6算是一个很好的技能吧。PS:默认的注释颜色是4 然后有0,1,2,3,4,5,6,7来选择。可以除了4和0以外选择其他的试试哦0 黑色 ---默认VIM的背景就是黑色,所有如果你选择0,那么就看不到注释了1 红色2 墨绿3 黄色4 难看刺眼的颜色,即默认的颜色5 类似粉色的,我不知道这种颜色叫什么6 淡蓝色7 白色 ---不要选择7,输入不刺眼,但是和其他的太一样了,不好...

2020-12-31 15:46:51 309

转载 计算任意日期是星期几

基姆拉尔森计算公式:算法是真的很高级,经常有这个感慨,越学越觉得算法很牛逼。int get_weekday_by_time(int y,int m,int d){ int w_day = 0;  if(m<3)  {    m+=12;    y--;  }  w_day = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1; if(w_day == 7) { w_day = 0; } ret

2020-12-31 14:58:54 166

空空如也

空空如也

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

TA关注的人

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