自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IO多路复用之select、poll、epoll

对于网络请求,来一个请求,我们就启动一个进程去处理一个请求,随着用户量越来越大,开启的进程数量也越来越多,而每开启一个进程是需要消耗资源的,例如内存等,这样,可能会导致资源不足,无法响应更多的请求。例如:某教室有10名学生和1名老师,这些学生上课会不停的提问,所以一个老师处理不了这么多的问题。那么学校为每个学生都配一名老师,也就是这个教室目前有10名老师。此后,只要有新的转校生,那么就会为这个学生专门分配一个老师,因为转校生也喜欢提问题。

2023-09-15 11:03:29 405

原创 多线程编程与互斥锁

在操作系统原理的术语中,线程是进程的一条执行路径。线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可以看作是Unix进程的表亲,所有的线程都是在同一进程空间运行,这也意味着多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。一个进程可以有很多线程,每条线程并行执行不同的任务。

2023-05-07 04:58:13 454

原创 多进程编程

服务器按处理方式可以分为迭代服务器和并发服务器两类。平常用C写的简单Socket客户端服务器通信,服务器每次只能处理一个客户的请求,它实现简单但效率很低,通常这种服务器被称为迭代服务器。然而在实际应用中,不可能让一个服务器长时间地为一个客户服务,而需要其具有同时处理 多个客户请求的能力,这种同时可以处理多个客户请求的服务器称为并发服务器,其效率很 高却实现复杂。在实际应用中,并发服务器应用的最广泛。

2023-04-17 06:02:30 855

原创 基于Arduino的物联网农业控制系统(含源码)

在这个农业监测设备中,我重点监测了环境温湿度,土壤湿度以及水位情况。我采用了小型且稳定的传感器,并且将相关数据使用 LoRaWAN协议上传到The Things Network(TTN).物联网设备在现代农业中发挥了极大的作用。随着智能农业的发展,越来越多的物联网小型设备应用在农业领域。农业发展正处于从传统向现代化大农业过渡的进程当中,急需用现代物质条件进行装备,用现代科学技术进行改造。

2023-01-06 00:17:49 2950

原创 AES加密算法

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法

2022-11-23 06:44:58 1046

原创 malloc、free函数及memset函数用法详解

最近在力扣刷题时,发现普通的创建数组很容易引起编译器报错。而使用到动态内存分配malloc()函数和初始化函数memset()可以避免这类问题的发生。本文将详细介绍一下两个函数的用法。

2022-08-15 17:25:22 5067

原创 二分查找(代码实例)

当我们要从一个序列中查找一个元素的时候,最快想到的方法就是顺序查找法(即从前到后依次查找)。但这种方法过于无脑,就是暴力的把每个元素都排查一遍。元素个数少的时候还行,一旦元素个数多起来,效率是非常低下,所以在实际中这种查找的方法是被摒弃的。这里就不得不介绍一种简单且效率较高的查找方法了二分查找法,又称折半查找法。......

2022-07-17 20:17:50 4672

原创 GPIO工作模式详解(含Arduino实例)

从最基础的51单片机,Arduino,到STM32,树莓派等等,这些上面都会有GPIO口这么一个概念,如果你点开了我这个博客,说明你大概率开始学习单片机,那么你应该了解的就是这些口可以输出高低电平,或者是读取引脚上的输入电平。GPIO(general porpose intput output):通用输入输出端口的简称。可以通过软件控制其输出和输入。GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。...

2022-06-19 17:33:41 9096

原创 基于MQTT协议实时温度上报阿里云iot平台

前言在上篇文章中我们用MQTT.fx模拟客户端实现了与阿里云物联网平台的双向通信,接下来我们自己动手编程使用mosquitto库实现一个客户端来实现一个发布端。一.iniparser 和 json1.为什么要使用iniparser库与阿里云进行通信时,我们需要如下一些信息,例如在使用MQTT.fx时:复制保存一下,另外之前发布和订阅的topic也要记下来:这些都是我们在项目中要用到的配置信息,具体应用在:clientid:struct mosquitto *mosquitto_new( c

2022-05-18 10:15:23 1944

原创 阿里云iot平台实现MQTT通信(mqtt.fx接入iot平台及测试)

一.阿里云iot平台环境搭建首先进入阿里云官网https://www.aliyun.com/?utm_content=se_1000301881注册并登录账号。点击控制,搜索物联网平台并进入。第一次使用阿里云物联网平台会弹出一个界面要求同意相关协议,同意即可。复制这三个东西建议保存在记事本中,后续会使用。返回产品,点击产品名称查看产品详情;接下来添加两个功能来进行测试:一个是标准功能一个是自定义功能。得到如图所示 然后点击发布上线我们可以在功能定义里查看功能的详细信息,其中当前温

2022-05-16 13:27:37 4075

原创 基于MQTT协议实现从树莓派上获得的温度上传至数据库中

到这里就可以将前一博客中构建的框架放入项目代码中了,只需要修改之前项目中相关socket代码部分即可。1.发布端:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <getopt.h>#include <sys/types.h>#include <s

2022-05-11 15:11:49 685

原创 MQTT----基于mosquitto库C语言实现发布和订阅

一.MQTT是什么MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议

2022-05-10 21:28:19 5334

原创 JSON格式与cJSON函数库

一. JSON1. JSON简介JSON(JavaScriptObject Notation, JS 对象标记) 是一种轻量级的数据交换格式。它是基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。2.json的语法规则json的语法规则:https://www.runoob.com/json/json-syn

2022-04-19 13:27:16 256

原创 Linux下iniparser库下载与使用

一. iniparser介绍iniparser是一个C语言库,是针对INI文件的开源解析器。ini文件则是一些系统或者软件的配置文件。 iniparser可以对配置文件进行解析、添加、修改、删除等操作。git地址如下:https://github.com/ndevilla/iniparser二. iniparser的安装1、下载iniparserwget https://codeload.github.com/ndevilla/iniparser/tar.gz/refs/tags/v4.1 -O

2022-04-17 14:28:57 1549

原创 MQTT协议介绍

MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为远程连接设备提过实时可靠的消息服务,作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量

2022-04-02 14:21:40 18535

原创 详解socket中TCP的三次握手和四次挥手机制

对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。我们还知道如下几个事实:1.一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。2.很多防火墙只允许特定目标端口的数据包通过。3.服务程序在listen某个端口并accept某个连接请求后,会生成一个新的 socket 来对该请求进行处理。再实现了socket服务器端和客户端编程后,我通

2022-03-23 15:11:54 7337

原创 冒泡排序与快速排序(代码实例)

冒泡排序(Bubble Sort)和快速排序(Quick Sort)都属于交换排序类。今天我们将从最基本的冒泡排序入手,介绍冒泡排序和快速排序。一.冒泡排序(Bubble Sort)1.基本思想冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的

2022-03-01 15:15:17 1032

原创 插入排序与Shell排序(图解+代码实例)

插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。1、直接插入排序(Insertion Sort)基本思想:每一次排序将一个待排序的数据,按其关键字的大小插入到前面的已经有序的序列中,然后进行排序,使其包含插入数据的序列再次有序,重复上述操作,直至整个序列有序,排序结束。一般情况下其时间复杂度为O(n^2),当所排序列本身有序时,其时间复杂度为O(n),空间复杂度为O(1)。这个排序算法是稳定的。...

2022-02-27 20:18:50 1555

原创 socket编程之服务器端与客户端(代码实例)

在我们学习的过程中,对TCP/IP、UDP、Socket编程这些词应该有所了解了。随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:什么是TCP/IP、UDP?Socket在哪里呢?Socket是什么呢?什么是TCP/IP、UDP?TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。UDP(User Data Protocol,用户数据报协议)是与TC

2022-01-18 10:21:54 13646 9

原创 树莓派DS18B20获取温度

1. DS18B20温度传感器简介(1)DS18B20介绍DS18B20是常用的数字温度传感器, 其输出的是数字信号, 具有体积小, 硬件开销低, 抗干扰能力强, 单线数字温度传感器.接下来我们将在树莓派上通过文件i/o调用来获取温度.(2)DS18B20连接树莓派配置内核启动后自动加载一线协议驱动连接引脚输入命令进行配置pi@raspberrypi:~ $ sudo raspi-config //打开配置选项按Enter选中继续按Enter选中打开内核文件pi@raspb

2021-12-04 16:55:47 1018

原创 指针函数、函数指针与回调函数

前言初学者碰到指针函数和函数指针往往会混淆概念,区分不清。其实区分这两个概念看的就是后面两个字,前面的两个字就是用来修饰的形容词。**我们需要通过后面两个字,区分它们究竟是指针还是函数。**下面我们将通过C代码来具体分析二者的区别,并进一步引出回调函数的概念。指针函数定义与声明格式指针函数:看到最后两个字,顾名思义就是函数。它的本质是一种函数,返回类型是某一类型的指针。声明形式:类型标识符函数名(函数参数1,函数参数2,…);以下几种方法都是正确的:(本人比较喜欢第一种方法,便于提醒自己返回值

2021-11-30 13:55:49 508 1

空空如也

空空如也

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

TA关注的人

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