![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
经验分享
文章平均质量分 79
X 、case
这个作者很懒,什么都没留下…
展开
-
Linux并发处理方式——多路复用之epoll
Linux并发处理方式——多路复用之epoll前言:自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术,在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。select的缺点:单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差;内核 / 用户空间内存拷贝问题,select需原创 2021-07-28 21:59:57 · 360 阅读 · 0 评论 -
Linux并发处理方式——多路复用之poll
Linux并发处理方式——多路复用之poll前言:poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。一、相关函数介绍#include <poll.h>struct pollfd{int f原创 2021-07-28 18:14:33 · 302 阅读 · 0 评论 -
Linux并发处理方式——多路复用之select
Linux并发处理方式——多路复用之select前言:我们都知道开启一个进程都要耗费cpu的资源,每一个进程都有独立4G的虚拟内存,在高并发的情况下进程不可能无限制地开启,这样对cpu的负载实在太大,要求是在无法满足,线程在开启也需要时间开销。那么现在我们就需要解决这个问题,在多路复用里可以做到把你需要做的事情交给内核进行监听,我们只需要在事件发生的时候去完成相应的事情即可,这样不会造成程序阻塞,使得程序效率不高。下面我介绍多路复用的select用法。一、相关函数介绍多路复用的用法主要就是把多个阻塞原创 2021-07-28 17:09:40 · 410 阅读 · 0 评论 -
Linux并发处理方式——多线程pthread
Linux并发处理方式——多线程pthread前言:简单来说,线程是进程的一条执行路径,在Unix系统下也叫做轻量级进程。所有的线程都在同一个进程下运行的,所以所有线程都可以共享进程里的资源,同时每个线程也有属于自身的栈空间、寄存器环境等等,每个线程执行着自己的任务。这时候又不得不考虑进程里面的资源分配问题了,如何解决死锁问题;父进程与子进程之间的关系,如何关闭子线程。一、相关函数1、父、子线程主线程和子线程的默认关系是:无论子线程执行完毕与否,一旦主线程执行完毕退出,所有子线程执行都会终止。这时原创 2021-07-25 23:34:02 · 1237 阅读 · 0 评论 -
Linux并发处理方式——多进程fork实现
Linux——多进程fork实现运行环境:Ubuntu18.04前言:在Linux环境下进程是很重要的知识点,它可以实现在一个应用程序下处理并发问题,并发处理的方式包括多进程、多线程和多路复用,前两者会更多地占用系统的资源。下面简单地利用server和client实现,server同时服务多个client。一、基本介绍1、fork、vfork(1)fork()系统调用会创建一个新的子进程,这个子进程是父进程的一个副本。这也意味着,系统在创建新的子进程成功后,会将父进程的文本段、数据段、堆栈都复制原创 2021-07-21 23:40:25 · 2226 阅读 · 0 评论 -
Linux——网络socket(server、client)
Linux——网络socket(server、client)前言:对于APUE网络socket,我们需要了解就是server和client之间的通信建立过程。首先我们需要知道两台不同网段的pc是怎么通信的,当一台pc通过应用程序发一段消息过来给另一台pc时,pc获取到数据包之后就行拆包解析,这些都是操作系统内核的工作,对于server而言,需要告诉内核使用什么ip和端口来建立起服务,当有client接入时,内核先进行解析,得到client的ip和访问端口之后再给server(对应的应用程序),最后完成通原创 2021-07-20 23:44:35 · 2341 阅读 · 2 评论 -
Linux——DS18B20温度读取(C语言)
Linux——DS18B20温度读取(C语言)运行环境及硬件:树莓派4B、DS18B20前言:1、打开树莓派的单总线驱动sudo raspi-config选定之后系统会提示进行重启,点击确认就行了。2、查看系统是否自动加载单总线的驱动 lsmod | grep w如果没有可以进行下面这个操作进行添加: sudo vim /boot/config.txt在最后进行添加:采用BCM GPIO的标准,使用引脚4dtoverlay=w1-gpio-pullup,gpiopin=4原创 2021-07-18 22:20:30 · 1002 阅读 · 0 评论 -
Linux——C语言文件IO(系统调用)
Linux——C语言文件IO(系统调用)运行环境:Ubuntu18.04前言:对于系统调用,我们对于文件IO需要学习的主要有open()、read()、write()、close()。我们平时使用的库函数其实都是通过系统调用进行封装成各种功能的函数。1、open()int open(const char *path, int oflag, mode)path: 要打开的文件、设备的路径oflag:(1)必选:O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)(2)可选原创 2021-07-18 18:44:53 · 541 阅读 · 0 评论 -
C语言数据结构——队列(循环队列)
C语言数据结构——队列(循环队列)前言:常见的队列数据结构有两种,原则都是“先进先出”。一种是直线的队列,这种队列相对内存而言是不合理的,因为不能够重复使用。另外一种是循环队列,这种队列的设计巧妙之处就在于数组内部空间可以重复使用,但是也存在这一些不足之处,比如,解决追赶问题,如何定义什么时候为空、什么时候为满。本章博客就是解决这个问题。1、在这里定义的结构体成员front充当一个队头的位置,用来打印数据;rear充当一个队尾的位置,用来插入数据;data[]数组用来存储数据,长度为10;qu原创 2021-07-14 19:47:48 · 639 阅读 · 0 评论 -
C语言数据结构——队列(尾插法)
C语言数据结构——队列前言:一、入队void in_team(int data){ node_t *new_node; new_node = (node_t *) malloc(sizeof(node_t)); if(new_node == NULL) printf("fail for malloc!"); memset(new_node, 0, sizeof(*new_node)); new_node->next = NULL; new_node->data = d原创 2021-07-13 22:56:04 · 729 阅读 · 1 评论 -
C语言——动态数组堆栈
C语言——动态数组堆栈环境:Linux18.04前言:对于数组而言,首先想到就是可以用来存放一些值,但是如何操作和分配里面有很多的东西可以学习,对于数组,我们只需要知道其首地址,全局还是局部,数据是否溢出这三个方面着手就好。这里介绍的动态数组是一个全局变量,我们会定义一个指针类型,因为指针和数组其实可以互换的。这里的动态数组堆栈主要功能有压栈(push)、出栈(pop)、创建(create)、销毁(empty)和遍历(printf)。一、压栈(push)void push(int data){原创 2021-07-13 22:33:05 · 388 阅读 · 0 评论 -
C语言——链表堆栈
C语言——链表堆栈本文章在这里介绍一个链表,其中的功能包括,压栈、出栈、销毁三个功能。一、压栈(push)压栈的基本思想就是头插法的方法,首先在这个过程中包括了头节点、第一个节点和新节点三个角色。在这里我们需要了解一下程序在运行的时候,内存的空间分配是什么情况。我们知道对于一个32位系统来说,一个进程能分配的最大内存大小为4G(虚存),其中的我们需要明白全局变量,局部变量,静态的内存分配位置。对于全局变量和静态而言,它们是分配在数据段,数据段在运行时又分为bss、data和rodata三个段,这些量原创 2021-07-13 11:11:12 · 425 阅读 · 0 评论 -
gdb调试出现No such file or directory
gdb调试出现No such file or directory在调试gdb的时候老是出现了No such file or directory,这是因为源文件与可执行文件不在同一个目录下。在这里提供一个治标不治本的办法。在这上面提示说这个malloc.c文件找不到。解决办法:show debug-file-directory 查看当前的debug路径set debug-file-directory 设置debug路径,这里为空。路径为空之后,显然它就开始从本路径开始执行了这种办法的原创 2021-07-13 10:15:39 · 13617 阅读 · 4 评论 -
基于arduino的农业大棚环境监测系统
基于arduino的农业大棚环境监测系统一、硬件准备器材数量arduino主板一块LCD1602一块DHT11温湿度传感器(22or21也行)一个光照强度传感器一个4×4按键一块蜂鸣器一个面包板(可有可无,有是最好的,接线方便)一块杜邦线若干二、软件准备开发环境版本arduino IDE1.8.13(自己看着办)windows10(自己看着办)1、arduino IDE下载:http原创 2021-04-21 17:16:30 · 7571 阅读 · 4 评论 -
Mixly第三方自定义用户库实现
Mixly第三方自定义用户库实现一、硬件准备名称数量rc522(带IC卡)一块arduino uno一块杜邦线若干二、软件准备名称版本Mixly最新Mixly官方下载链接:三、项目开始四、相关效果展示...原创 2021-05-19 18:51:06 · 1090 阅读 · 0 评论 -
Arduino版本 DFrobot mind+图形化模块自定义添加库--rc522(RFID)
Arduino版本 DFrobot mind+图形化模块自定义添加库–rc522(RFID)一、软件准备名称版本Mind+最新VS code(这个没硬性要求)最新二、硬件准备名称数量Arduino uno一块MFRC522一块IC卡一块杜邦线若干三、项目开始1、相关参考文章DF官方参考链接:https://mindplus.dfrobot.com.cn/ext-api#target_10DF官方学习视频参考:原创 2021-05-12 17:01:20 · 1652 阅读 · 1 评论 -
基于python飞桨PaddleHub实现将视频流转化为皮影戏
基于python飞桨PaddleHub实现将视频动作转化为皮影戏飞桨(PaddlePaddle)是集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台,已被中国企业广泛使用,深度契合企业应用需求,拥有活跃的开发者社区生态。提供丰富的官方支持模型集合,我们这里将要使用到其中的骨骼节点检测模型,通过PaddleHub提供的人体骨骼关键点检测预训练模型,我们就可以快速实现皮影戏的效果。这里说一下这个项目的大体实现流程,先将现有的视频按帧剪切为一张张的图片,并保存到本地,使用Pad转载 2021-05-06 22:55:16 · 394 阅读 · 0 评论 -
基于EMQ与Wemos实现用web控制LED灯
基于EMQ与Wemos实现用web控制LED灯原创 2021-04-28 12:15:37 · 317 阅读 · 1 评论 -
基于SIoT添加插件控制Mind+掌控板的LED灯
基于SIot(添加插件)和Mind+掌控板的数据传输一、硬件准备名称数量Mind+掌控板1二、软件准备名称版本Mind+ IDEV1.7.0 RC3.0(自己看着办)三、项目开始1、SIot相关设计四、总结...原创 2021-04-27 22:28:38 · 575 阅读 · 3 评论 -
基于arduino通过软串口发送数据给DFrobot Mind+并上传阿里云物联网平台
基于arduino通过软串口发送数据给DFrobot Mind+并上传阿里云物联网平台一、硬件准备器件数量Mind +1arduino uno1Mind +扩展板1杜邦线若干二、软件准备名称版本Mind+V1.7.0 RC3.0(自己看着办)arduino IDE1.8.13(自己看着办)三、项目开始1、四、总结...原创 2021-04-25 22:26:14 · 1635 阅读 · 1 评论 -
wemos(8266)+Mqtt+MySQL实现环境光照强度上传数据库
云+数据库MySQL一、项目硬件准备1、一块wemos开发板2、一个光照传感器3、若干杜邦线二、项目软件准备1、一个云服务器+创好的MySQL(安装宝塔可快速搭建数据库)2、mqtt x测试软件三、项目开始1、软件部分(1)安装宝塔(2)在宝塔开放相关端口这里开放了18083、1883、8080等端口,其中18083用来打开EMQ X Dashboaord,1883用来mqtt协议通信。(3)创建MySQL数据库(4)建立相关数据库的表(我这里主要是上传关照强度的值)相关原创 2021-04-20 22:27:45 · 662 阅读 · 0 评论