自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大端字节序和小端字节序

大端字节序和小端字节序1.什么是大小端字节序2.验证大小端字节序1.什么是大小端字节序计算机硬件有两种储存数据的方式:大端字节序(MSB)和 小端字节序(LSB)。小端字节序(LSB)将这样的数据存储在计算机中,地址从地位到高位应该是:78 56 34 12int a=0x12345678一共四个字节的地址,假设从0x1001 ~ 0x1004;那么,对于小端字节序来说系统是这样存储的:由图可以看出,小端字节序的存储规则是:数据的低位存储在地址低位,数据的高位存储在地址高位大端字节序(

2021-08-18 00:42:17 4591 2

原创 双向循环链表

关于双向循环链表的实现方式及实例

2021-08-15 00:02:28 430

原创 通过理解函数指针构建回调函数来实现mosquitto源码功能

1.指针(多级指针)我们从人类起源时期讲起,说从前…hahahaha开玩笑了,但是理解这一切的基础就是先明白 指针到底是什么?下面通过一段代码来理解复习一下指针int main (int argc, char **argv){ int a = 0x12345678; int * p1; //一级指针 int * *p2; //二级指针:指向p2指针 的指针 int * **p3; //三级指针:指向p3指针的指针 的指针

2021-08-10 23:16:38 1063 1

原创 Linux基础(5)— Shell

Shell基础1.Shell概述2.Shell脚本的执行方式(1)echo输出命令(2)编写第一个脚本(3)执行方式3.Bash的基本功能1.Shell概述  Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止以及编程。2.Shell脚本的执行方式(1)echo输出命令在这里,我们首先学习一个最简单的Shell命令来进行脚本的编写命令格式:echo 选项 输出内容 -e //支持反斜杠红纸的转

2021-08-10 12:46:57 436

原创 Linux基础(4)— vim

命令差不多总结完了,也顺便总结一下Linux程序员必备的vim操作技能吧!

2021-08-09 22:53:02 295

原创 Linux基础(3)

!!!

2021-08-08 23:56:06 569

原创 Linux基础(2)

  Linux下一切皆文件,而操作任何文件就必须使用到命令,下面我们就来介绍一下lLinux的基本命令

2021-08-06 23:06:22 392

原创 Linux基础(1)

  Linux学了快一年,快要参加秋招了,也要重新准备一下Linux所学的知识了,对自己所学的Linux知识整理出一个框架体系,也正好借此机会好好重新复习以下Linux!

2021-08-05 23:49:16 152

原创 守护进程的三种实现方式

实现守护进程(1)nohup(2)fork()按步骤创建(1)nohupnohup ——英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。使用权限所有使用者语法格式 nohup Command [ Arg … ] [ & ]

2021-08-04 23:39:50 5743 1

原创 阿里云下Ubuntu18.04安装部署EMQ X 消息服务器

EMQ X服务器简介EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接阿里云后台开启端口EMQ X 消息服务器默认占用的 TCP 端口包括:1883 MQTT 协议端口8883 MQTT/SSL 端口8083 MQTT/WebSocket 端口8080 HTTP API 端口18083 Dashb

2021-07-31 16:29:24 2367 2

原创 collect2:fatal error: ld terminated with signal 11 [Segmentation fault] 问题的解决

- 问题产生  今天gcc编译C文件的时候遇到一个始终无法解决的问题collect2: fatal error: ld terminated with signal 11 [Segmentation fault]- 问题原因  首先我们看到编写程序最眼熟的 [Segmentation fault]系统发送了11号段错误信号终止了编译,再观察ld只是链接文件用的,相当于Windos下的快捷方式,由此我们应该从ld下手解决, 可能是无论百度还是各种查找,都是一些没用的信息,根本确定不了错误根源,

2021-07-31 14:52:27 5682 3

原创 线程同步——条件变量

条件变量一、条件变量介绍二、运行代码三级目录一、条件变量介绍  条件变量是线程可用的一种同步机制。 条件变量给多个线程提供了一个回合的场所,条件变量与互斥量一起使用,允许线程以无竞争的方式等待特定的条件发生。  条件本身是由互斥量保护的。 线程在改变条件状态之前必须先锁住互斥量。其他线程在获得互斥量之前都不会察觉到这种改变,因为互斥量必须在锁定以后才能计算体条件。  在使用条件变量之前,必须进行初始化。 由pthread_cond_t数据类型表示的条件变量可以通过两种方式初始化,可以把常量PTHRE

2021-07-20 00:10:36 947

原创 Linux下C程序的内存布局

进程空间内的内存布局  在Linux下,进程内存管理的对象都是虚拟内存,每个进程先天就有0~4个G的各自互不干涉的虚拟内存空间,0 ~3G都是用户空间执行自己代码,高1GB的空间是内核空间执行Linux系统调用的,这里存放在整个内核的代码和所有的内核模块,用户看到和接触到的都是该虚拟地址,并不是实际的物理内存地址。 Linux下一个进程在内存里有三部分的数据,就是“代码段”、“堆栈段”和“数据段“。其实学过汇编语言的人一定知道,一般的CPU都有上述的三种寄存器,以方便操作系统的运行。这三部分是构成一个完整

2021-07-15 18:48:49 252

原创 直接插入、折半插入、希尔排序

插入排序一、直接插入排序1. 代码展示2. 排序优化3. 时空分析二、折半插入排序1. 代码实现2.时空分析三、希尔排序1. 代码展示2. 时空分析  插入排序的思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当的位置上,直到所有待排序记录全部插入为止。  简单来说:就好比斗地主手里拿了一幅扑克牌,你要从前往后整理成有序的牌,则每抓一张牌,就插到合适的位置,直到抓完牌为止,即可得到一个有序序列;  可以选择不同的方法在已排好序的记录中寻找插入位置。根据查找方式的不同,主要

2021-07-14 18:57:20 704

原创 冒泡排序与快速排序

两种交换排序算法一、冒泡排序1. 代码展示2. 代码优化3. 时空分析二、快速排序1. 代码展示2. 代码优化3.时空分析  交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时,则进行交换,直到整个序列满足要求位置。在这里首先介绍基于简单交换思想实现的排序——冒泡排序,然后再此基础上进行改进的排序方法——快速排序。一、冒泡排序  冒泡排序(Bubble Sort) 一种最简单的交换排序方法,他通过比较两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记

2021-07-13 18:22:59 1831

原创 传输层——TCP(详解三路握手与四次挥手)

TCP协议TCP协议1. TCP协议概述2. TCP协议要点TCP协议1. TCP协议概述  TCP协议与电话语音通信相似,是面向连接的、可靠传输、有流量控制、拥塞控制、面向字节流传输、提高网络利用率等诸多优点的协议。其最终功能与UDP一样,提供进程间端对端的通信,但和UDP区别还是很大的2. TCP协议要点1)当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,**最大传输段大小(MSS)通常受该计算机连接的网络的数九链路层的最大传送单元(M

2021-07-11 12:38:35 1279 1

原创 传输层——UDP

传输层一、传输层概述1.1 传输层简介1.2 端口1.3 常见端口二、UDP协议2.1 UDP概述2.1 UDP特点2.3 UDP报文格式2.4 UDP使用场景三、TCP协议一、传输层概述1.1 传输层简介  这一层在之前的博客中简单介绍了一下,传输层提供端对端通信服务,通俗的讲,两个主机通信,就是应用层上两个进程之间的通信。  在网络层中,IP协议能分组准确的将数据发送到目的IP地址,那目的IP地址又怎么知道具体要交给哪一个主机呢?数据链路层的MAC地址又可以确定要将数据具体交付到同一网关下的目的

2021-07-11 00:42:06 586

原创 C/C++中的跳转语句:break、continue、goto

(1)break语句作用:用于跳出选择结构或者循环结构break使用的时机:出现在switch条件语句中,作用是终止case并且跳出switch;出现在循环语句中,作用是跳出当前的循环语句;出现在嵌套循环中,作用是跳出最近的内层循环语句;示例1#include <iostream>using namespace std;int main(){ //1.出现在switch语句当中 cout << "请选择难度" << endl; cout &

2021-07-09 12:06:52 4032

原创 计算机网络学习——OSI七层模型与TCP/IP模型

  今天稍微总结一下本学期学到的计算机网络的相关知识,先介绍一下网络的组成。网络:(Network)有若干个结点(Node)和连接这些结点的链路(Link)组成.(网络中的结点可以是计算机、集线器、交换机或路由器).互联网:由路由器连接起来的覆盖范围更大的网络,因此互联网就是“网络中的网络”.因特网:世界上最大的互联网络.  因此,我们先初步建立这样的基本概念:网络把许多计算机连接在一起,而互联网把许多许多网络连接在一起。因特网就是世界上最大的互联网为了明确概念,我们把直接连接在计算机上的网

2021-07-05 22:46:31 638 1

原创 信号(signal)

signal一、Linux下信号的介绍一、Linux下信号的介绍我们经常使用kill命令来进行程序的终止,但是我们的kill命令并不是真正的杀死程序,这是为什么?软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。...

2021-06-13 20:02:23 2367

原创 树莓派——libgpiod

这里写目录标题一、libgpiod 介绍(1)libgpiod(2)安装编译(3)命令行使用二、libgpiod – C API三、libgpiod – C API examples一、libgpiod 介绍(1)libgpiod  用于与 linux GPIO 字符设备交互的 C 库和工具  字符设备(gpiod 代表 GPIO 设备)从 linux 4.8 开始,不推荐使用 GPIO sysfs 接口。用户空间应该使用字符设备。这个库封装了 ioctl 调用和简单的 API 背后的数据结构。

2021-06-11 01:27:23 3155 1

原创 树莓派——TSL2561获取光强数值(C语言)

TSL2561获取光强一、TSL2561光强传感器二、使能内核I2C驱动模块一、TSL2561光强传感器  TSL2561是一款高速、低功耗、宽量程、可编程灵活配置的光强度数字转换芯片。适合利用树莓派开发板或STM32型单片机来进行编程开发。了解详细芯片手册点击 : datasheet引脚功能引脚功能VIN电源供电(3.3V)GND接地SCLI2C时钟线SDAI2C地址线INT中断控制内部结构和工作原理TSL256x 是第二

2021-06-09 00:04:00 2788 6

原创 IIC协议——i2c-dev的使用

/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note *//* i2c-dev.h - i2c-bus driver, char device interface Copyright (C) 1995-97 Simon G. Vogl Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl> This program is free soft

2021-06-06 18:19:22 3892 4

原创 IIC协议

IIC协议概述一、IIC总线概述二、IIC总线信号实现三、IIC典型时序一、IIC总线概述IIC总线简介IIC总线是Philips公司在八十年代初推出的一种串行、半数工总线主要用于近距离、低速的芯片之间的通信.IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步, IIC总线硬件结构简单结构简单,成本较低,因此在各个领城得到了广泛的应用IIC总线介绍IIC总线是一种多主机总线, 连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,

2021-06-02 10:10:11 985

原创 mosquitto命令行参数

mosquitto(1)mosquitto_pub发布端(2)mosquitto_sub订阅端(3)报文种类启动代理服务mosquitto -v(1)mosquitto_pub发布端参数命令参数说明-d开启debug选项-f把一个文件的内容做为消息的内容发送。经测试,支持txt文件,不支持doc等其他形式文件-h指定要连接的域名 默认为localhost-i给指定的clientId的用户发送消息-I给指定的clientId前缀的用户发送消

2021-05-25 23:06:21 666

原创 基于mosquitto库实现MQTT订阅与发布

mosquitto库实现发布与订阅一、下载安装mosquitto二、mosquitto发布与订阅三、mosquitto运行实例一、下载安装mosquitto(1)下载地址:https://mosquitto.org/download/Linux命令行输入wget https://mosquitto.org/files/source/mosquitto-1.6.12.tar.gz(2)解压tar -zxvf mosquitto-1.6.12.tar.gz(3)编译安装make

2021-05-24 00:18:30 657

原创 mosquitto库函数详解

mosquitto库函数(1)mosquitto_lib_init(2)mosquitto_lib_cleanup(3)mosquitto_new(4)mosquitto_destroy(5)void mosquitto_connect_callback_set(struct mosquitto * mosq, void (*on_connect)(struct mosquitto *mosq, void *obj, int rc) )(6)void mosquitto_disconnect_callbac

2021-05-18 00:32:46 6387 3

原创 getopt()和getopt_long函数

命令行参数解析(1)getopt()(2)getopt_long()在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢?通常使用GNU C提供的函数getopt、getopt_long、getopt_long_only函数来解析命令行参数。(1)getopt()1. 简介getopt()函数就是用来解析命令行参数的,包含在<unistd.h>头文件当中。2.定义int getopt(int argc, char * const argv[], con

2021-05-17 01:40:10 666

原创 extern关键字的作用

extern关键字(1)变量(2)函数首先我们了解一下extern的工作原理:简单来说就是,现在当前文件中找有没有全局变量,没有找到,才会去其他文件中查找这个关键字真的比较绕,每次出现,每次容易绕混,到底是声明还是定义?在定义变量的时候,这个extern居然可以被省略(定义时,默认均省略);在声明变量的时候,这个extern必须添加在变量前,所以有时会让你搞不清楚到底是声明还是定义。或者说,变量前有extern不一定就是声明,而变量前无extern就只能是定义。注:定义要为变量分配内存空间;而

2021-05-15 16:06:18 3094

原创 const关键字的作用

const关键字1、 修饰变量2、 修饰数组3、 修饰指针4、 修饰函数参数1、 修饰变量C语言中采用const修饰变量,功能是对变量声明为只读特性,并保护变量值以防被修改。举例说明如下:const int i = 5;上面这个例子表明,变量i具有只读特性,不能够被更改;若想对i重新赋值,如i = 10;则是错误的。值得注意的是,定义变量的同时,必须初始化。定义形式也可以写成int const i=5,同样正确。此外,const修饰变量还起到了节约空间的目的,通常编译器并不给普通cons

2021-05-15 14:48:07 1920 1

原创 字符分割函数strtok

分割函数strtok一、strtok()基本使用和介绍二、strtok()注意事项三、strtok()函数源码一、strtok()基本使用和介绍1、函数原型char *strtok(char *str, const char *delim)2、参数str—要被分解的字符串delim—用作分隔符的字符(可以是一个,也可以是集合)3、返回值该函数返回被分解的第一个子字符串,若无可检索的字符串,则返回空指针4、实例代码#include <string.h>#includ

2021-05-12 16:19:55 29820 9

原创 MQTT协议

MQTT介绍一、MQTT介绍二、MQTT协议特点三、MQTT协议原理(1) MQTT协议实现方式(2)网络传输与应用消息(3)MQTT客户端(4)MQTT服务器(5)MQTT协议中的订阅、主题、会话一、MQTT介绍MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限

2021-05-06 23:02:53 587

原创 cJSON的学习

cJSON一、JSON介绍二、cJSON介绍三、封装cJSON一、JSON介绍JSON 全称 JavaScript Object Notation,即 JS对象简谱,是一种轻量级的数据格式。JSON的语法规则JSON对象是一个无序的“名字/值”的键值对集合:以"{“开始,以”}"结束,允许嵌套使用;每个名称和值成对出现,名称和值之间用“ :”分开键值对之间用“ :”分隔在这些字符前后允许存在无意义的空白符对于键值,可以有如下值:一个新的json对象数组:使用"[“和”]"表示字

2021-05-06 17:33:44 229

原创 Makefile的使用

Makefile一、Makefile介绍二、 Makefile的通用结构三、写Makefile一、Makefile介绍慢慢项目代码成型以后,老师又交给我们Makefile的使用,才发现多好用。一个项目文件中的源文件不计其数,按类型、功能模块分别存放在若干个目录当中,而你要运行的时候,总不能一个一个打开去运行命令,而makefile制定了一系列规则,那些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至需要一些更复杂的功能操作,都可以通过makefile去执行,他就像一个Shell脚本一样,其

2021-04-15 15:58:27 364

原创 Linux下静态库与动态库

一、库的介绍在windows和Linux下都存在着大量的库,库是什么呢?本质上来说,库是一种可执行代码的二进制文件,可以被操作系统载入内存执行。我们通常将一些通用函数写成函数库,所以库是别人写好的,现有的、成熟的,可以复用的代码。我们显示写代码不可能每一份代码都从头编写,但当我们拥有库时,我们就直接可以将我们所需要的文件链接进我们的程序中,可以节省大量的时间,提高效率。Linux下主要有两种库:静态库和动态库。二、静态库静态库的文件名命名方式是“libxxx.a”,库名前面加“lib”,window

2021-04-13 21:51:21 531

原创 iniparser库介绍应用

iniparser一、 iniparser库介绍二、一、 iniparser库介绍最近写实验代码,经常要ini解析配置文件,到底什么是ini配置文件?iniparser是一个C语言库,是针对INI文件的开源解析器ini文件是一些系统或者软件的配置文件iniparser库中的API函数可以对ini文件(配置文件)进行解析、配置、删除等操作下载iniparser库:Github:https://github.com/ndevilla/iniparser下载解压之后切换到iniparser-ma

2021-04-06 21:47:27 625

原创 多线程编程与锁

目录1 多线程编写的漏洞2 解决漏洞方法——锁(1)阻塞锁(2)非阻塞锁(3)自旋锁(4)互斥锁(5)死锁1 多线程编写的漏洞上一篇博客中写介绍了多线程,并且写了一个多线程代码,如下: 1 #include <stdio.h> 2 #include <string.h> 3 #include <errno.h> 4 #include <unistd.h> 5 #include <pthread.h> 6 #include

2021-03-17 21:38:55 179

原创 多线程编程

多线程编程一、 线程概念(1)什么是线程(2) 线程共享资源(3)线程非共享资源(4)线程优、缺点(5)线程与进程比较二、 线程相关函数和属性(1)主线程和子线程(2)线程相关函数(3)线程的创建与属性(1)pthread_create()(2)pthread_attr_t(3) pthread_attr_init()(4)pthread_attr_setdetachstate()(5)pthread_attr_setschedpolicy()(6)pthread_attr_setschedparam()(

2021-03-17 17:13:31 834

原创 多进程编程

目录1 服务器并发访问的问题服务器按照处理方式可以分为迭代服务器和并发服务器两类。上一篇用C写的Socket客户端服务器间通信,服务器每次只能处理一个客户的请求,它实现简单但效率很低,通常这类服务器被称为迭代服务器;然而在实际生活中,不可能让一个服务器只为一个客户服务,而需要其具有同时处理多个客户请求的能力,这种同时可以处理多个用户请求的服务器叫做并发服务器。Linux下有三种实现并发服务器的方式:多进程并发服务器、多线程并发服务器、IO复用,今天就是多进程并发服务器的实现。2 多进程编程(1)什

2021-03-10 19:08:31 1538

原创 socket编程入门

socket编程1 socket通信2 客户端程序socket()connect()1 socket通信想要了解socket就必须要知道计算机网络通信的TCP/IP协议族,首先TCP/IP协议族包括:运输层、网络层、链路层,而socket的位置如图所示,Socket是应用层与TCP/IP协议族通信的中间软件抽象层Socket即为套接字,应用程序要为网络通信而创建一个套接字(socket)时,操作系统就返回一个值作为描述符来识别这个套接字,然后应用程序以该描述符作为传递参数,通过调用相应函数(如read

2021-02-23 20:17:39 524

空空如也

空空如也

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

TA关注的人

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