自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++多线程

语言级别的多线程,优点是跨平台底层仍然是调用系统API(识别不同系统,调用不同的系统调用)创建线程头文件threadthread的构造函数:thread() noexcept //构造线程对象,不执行任何任务thread(thread&& _Other)noexcept//移动构造,将一个线程对象的资源所有权转移给新创建的线程对象,原来的线程对象不再代表线程temp...

2023-02-10 22:00:00 238

原创 C++复健:运算符重载,实现string容器,实现string和vector的迭代器

使得对象的运算像内置类型一样a.operator+(b);重载运算符的一些注意点:不能重载运算符操作基础数据类型:(1)重载运算符必须和用户定义的class类型一起使用(2)重载的运算符的参数至少有一个应该是一个类对象(或类对象的引用)int operator+(int x);//错误编译器做对象运算会调用对象的运算符重载函数,优先调用成员方法,若无则在全局作用查找合适的运算符...

2023-01-29 20:01:00 276

原创 Unix\Linux多线程复健(二)线程同步

线程同步并非让线程并行,而是有先后的顺序执行,当有一个线程对内存操作时,其他线程不可以对这个内存地址操作线程之间的分工合作线程的优势之一:能够通过全局变量共享信息临界区:访问某一共享资源的代码片段,此段代码应为原子操作全局变量在共享内存中一个进程中有多个线程,共享全局变量,这是一件既有用又有些危险的特性需要线程同步来维护临界资源的安全性下面的程序中两个线程堆全局变量number进...

2023-01-25 20:15:00 912

原创 Unix\Linux多线程复健

线程是程序中完成一个独立任务的完整执行序列(是一个可调度的实体)一个进程可以包含多个线程查看指定进程的线程号:ps -Lf pid进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位分类:内核线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态用户线程:用户级线程是指不需要内核支持而在用户程序中实现的线程,它的内核的切换是由用户...

2023-01-22 22:41:00 1249

原创 git使用(复健 1 )

#ubuntu:sudo apt-get install gitwinodwshttps://git-scm.com/downloads设置用户名和邮箱:$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"#global表示本机上所有git仓库...

2023-01-16 21:37:00 325 1

原创 进程间如何进行通信[IPC](二)共享内存

talk命令talk使用socket进行通信,从键盘和socket接收数据,键盘的输入被复制到上半窗口,通过socket发出,同时通过socket读入的字符显示到下半窗口select系统调用#include <sys/time.h> #include <sys/types.h> #include <unistd.h> int sele...

2022-04-15 09:39:00 127

原创 mqtt.js和python paho-mqtt,python编写通过mqtt服务器和网页之间收发数据的程序,将数据存入sqlite3数据库...

mqttmosquitto -v8、修改配置文件,使其支持websocket协议,建立配置文件/etc/mosquitto/mosquitto.conf 把mosquitto源码目录下提供的默认配置文件复制到/etc/mosquitto目录cp mosquitto.conf /etc/mosquittocd /etc/mosquitto然后,修改配置文件mosquitto.con...

2022-03-04 11:16:00 328

原创 Linux 多进程(三)进程控制,孤儿进程,僵尸进程

进程控制,处理僵尸进程(父进程如何等待子进程的退出)exit 进程退出#include<stdlib.h>void exit(int status);//是标准c库函数//内部调用系统调用#include<unistd.h>void _exit(int status);#include<stdio.h>#include<unistd.h...

2021-12-25 22:10:00 219

原创 Linux多进程(二)

如何在一个程序中运行另外一个程序:exec系列调用#include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ... /* (char *) NULL */); int ex...

2021-12-25 21:59:00 235

原创 ESP32控制舵机转动,使用blinker实现远程开关宿舍灯/宿舍门

ESP32控制舵机转动,使用blinker实现远程开关宿舍灯/宿舍门准备杜邦线若干条(至少3条)舵机一个,我使用的是SG90,大概扭力为1.4kg/cmESP32/ESP8266一块,我的是乐鑫的,带WIFI模块,大概30RMBUSB数据线一条ESP32使用servo库会出现编译问题,架构不匹配,所以我这里直接使用pwm进行舵机的控制,你也可以使用ESP8266直接使用servo库控...

2021-12-19 23:03:00 7128 6

原创 使用Opencv+树莓派实现人脸识别(二)人脸识别和PyQt界面整合

人脸识别模型训练简单了解LBPH算法(在OpenCV使用的三种识别算法中是精度比较高的)cv2.face.LBPHFaceRecognizer_create()#使用LBPH算法训练模型(注意OpenCV3中是createLBPHFaceRecognizer,这里因为树莓派和Window使用的版本不一样,所以到树莓派上还会改代码)开始训练模型这里还是先训练,毕竟真正的人脸识别开锁,人脸...

2021-12-17 15:39:00 1347

原创 使用Opencv+树莓派实现人脸识别(一)图片人脸检测和摄像头人脸捕捉

前置安装我的树莓派是3b,就1G内存,系统为stretch版本,自带的python为3.5版本强烈建议在烧写树莓派系统时就直接用buster版本,自带的python版本在3.7及以上Windows下直接使用PyCharm安装python-opencv,python-opencv-contrib,pyqt5,pyqt5-tools树莓派下编译安装OpenCV:十分困难,可能要编译4-5小时...

2021-12-12 20:46:00 2996 1

原创 Linux 多进程(一)

Linux 多进程进程进程理论相关内容直接看教材就好现代操作系统等shell运行程序的过程:用户键入命令->shell建立一个新进程来运行此程序->shell将程序从磁盘载入->程序在它的进程中运行直到结束进程=程序+数据集合进程是操作系统动态执行的基本单元,基本的分配单元进程的状态和状态转换进程的三个基本状态:就绪态,运行态,阻塞态五种状态的模型:创建态...

2021-11-25 21:41:00 920

原创 栈-栈的实现/栈的应用(栈混洗,表达式求值,括号匹配,进制转换,最小/大栈,单调栈)...

栈(stack)是一种先进后出的数据结构内部api接口:top();//获取栈顶元素值push();//放入元素到栈顶pop();//将栈顶元素弹出size();//元素个数isEmpty();//是否为空接口实现使用向量(动态数组/顺序表)实现将tail初始化为0,每增加一个元素,tail++,删去一个元素tail--,tail-1即为栈顶元素用size来记录元素个数#i...

2021-11-21 22:01:00 189

原创 进程间如何进行通信[IPC](一)使用管道(1)

进程间通信IPC(一)管道(1)不同进程(一般指用户进程)之间的资源是独立的,在一个进程中无法直接访问另一个进程中的资源(比如读时共享,写时拷贝)通信目的:数据传输,通知事件的发生,资源共享(涉及同步和互斥),进程控制同步:(直接制约关系)为了完成某个任务而创建的多个进程,在某些位置上协调它们的工作次序而等待,传递信息所产生的制约关系,制约源自于它们的相互合作异步:多道程序环境允许多个程...

2021-11-16 23:02:00 229

原创 Unix编程实践教程笔记(四) IO重定向

IO重定向//将stdin(标准输入)重定向到文件的第一个方法// 策略解释:// close then open// 先使用close将标准输入的连接切断// 使用open打开连接到stdin的文件// 当前可用的文件描述符最低位0,因此所打开的文件将被连接到标准输入上去// 如此:所有从标准输入读取数据的函数都将从此文件中读入#include<stdio.h&g...

2021-11-14 19:42:00 169

原创 Linux C/C++开发环境和编译调试(二)详细记录如何使用GDB进行调试

## 这篇博客主要是用来记录前些天复习GDB调试的过程调试前的准备Linux C/C++开发环境和编译调试(一) 需要关闭-o,打开-g,打开-Wall来看一下加入代码调试信息(-g)之后生成的可执行文件大小和没加的对比:root@ziggy-virtual-machine:~/learn_gdb# gcc -g test.c -o demo1 root@ziggy-virtual-...

2021-11-06 19:19:00 99

原创 复习 C++ 类(二)拷贝构造,赋值运算符,析构(1)

拷贝,赋值,销毁在类的基本概念一文中,有讲过这三种操作如果我们定义一个空类class Empty{};如果我们自己没有声明拷贝构造,拷贝赋值,析构函数,编译器在处理之后会自动添加此三函数的默认版本(当然如果没有声明任何构造函数,也会声明一个default构造函数)以上编译器生成的操作都是inline和public的上面的空类就如同:class Empty{ Empt...

2021-11-03 13:22:00 383

原创 来写Makefile吧

来写Makefile吧一些小程序可能使用Makefile就足够了,比如只有几个源文件的C++程序,使用CMake可能有点杀鸡用牛刀,直接g++又会重复输入,所以写个Makefile比较省心命名:makefile MakefileMakefile书写规则目标...:依赖... 命令(shell命令) .... .... #目标是最终要生成的文件,依赖是生成目标所需的文件或目标,命令...

2021-10-30 20:50:00 37

原创 Unix编程实践教程笔记(三) 目录与文件属性(写一个ls命令)

3. 目录与文件属性(写一个ls命令)ls找出当前目录文件名,ls -l显示详细信息(文件名字典序排序后)3.1 文件树磁盘上的文件和目录被unix组织为一颗目录树每个节点为目录或文件目录是特殊的文件,包含许多文件记录.表示当前目录,..表示上级目录more,cat等命令可以区分文件和目录,且目录文件包含一定的数据结构#include <dirent.h>...

2021-10-23 23:57:00 180

原创 Unix编程实践教程笔记(二)用户,文件操作,联机帮助,实现who,cp

命令也是程序在unix中,将自己写的程序的可执行文件放到/bin,/usr/bin,/usr/local/bin任一目录中即可增加新的命令who命令从第一列开始分别为:用户名,终端名,登录时间通过查询man who,得知已登录用户的信息放在/var/run/utmp中使用man -k xxx可以根据关键字搜索联机帮助由查询可知,utmp文件中保存的是结构体数组,数组元素是ut...

2021-10-18 19:40:00 64

原创 2. HTTP协议基础

HTTP协议用于客户端和服务端之间的通信应用HTTP协议时,必定是一段担任客户端,另一端担任服务器端且HTTP协议可以明确区分哪端是客户端或服务器端2.1 请求和响应请求必定由客户端发出,肯定是先从客户端开始建立通信,服务端在没有接收到请求之前不会发送响应客户端发送给HTTP服务器端请求报文的格式:GET /index.html HTTP/1.1Host: hackr.jp....

2021-10-16 21:53:00 71

原创 Unix编程实践教程笔记(一)系统编程概述,实现more命令

概述基础知识:内存空间用来存放程序和数据又分为系统空间:容纳操作系统的内存空间用户空间:容纳应用程序的内存空间操作系统:又叫内核程序想要访问设备必须通过内核,因为只有内核才能直接管理设备系统资源1.处理器:执行指令(程序由指令构成)2.输入输出(I/O):程序的所有输入输出都必须流经内核(保证正确性,有效性,安全性)3.进程管理:进程指一次程序的运行,每个进程都有自己的资源,...

2021-10-10 15:31:00 103

原创 C++ 函数(二)函数重载/函数指针/函数匹配

main函数不能重载重载函数重载函数应该在形参数量或形参类型上有所不同只有返回类型不同,也不是重载函数注意注意:形参名字不同没有影响,类型别名为已存在类型提供一另一个名字,这也没有影响typedef Phone Telno;void lookup(const Phone&){}void lookup(const Telno&){}//上面的两个函数是同一函数,不是...

2021-10-05 14:59:00 124

原创 C++ 类(一)构造函数,访问控制,类的一部分特性(this,类成员,类类型,const函数等),内联函数...

防卫式声明,防止头文件重复引用带来的错误#ifndef __COMPLEX__#define __COMPLEX__class complex{};#endif1. 构造函数(一)构造函数是特殊的类的成员函数,用于控制类的对象的初始化构造函数没有返回类型,不同构造函数的参数数量或类型必须有区别构造函数不能声明为const的,因此如果创建类的const对象时,构造过程中构造函数可以...

2021-10-04 16:14:00 94

原创 C++ const (二) constexpr和常量表达式,constexpr函数

constexpr和常量表达式2.5 constexpr和常量表达式常量表达式:不会改变且在编译过程中就能得到计算结果常量表达式:字面值,用常量表达式初始化的const对象也是常量表达式const int max_files = 20;const int max_fils_2 = max_files+1;int s = 1;//不是常量表达式const int sz = get_s...

2021-10-02 18:16:00 143

原创 C++ 函数(一)参数传递/return语句/返回类型

C++ 函数(一)参数传递/return语句/返回类型6.1 基础函数的返回值不能是数组或函数类型,但可以是指向数组或函数的指针6.1.1 作用域,局部对象函数体是一个块,构成一个新的作用域,其中定义的变量和形参都是局部变量在函数体外部定义的对象存在于程序的整个执行过程中自动对象:只存在于块执行期间的对象,例如形参,函数终止,形参会被销毁,局部变量如果本身不带初始值,则会执行默认初...

2021-09-29 21:16:00 370 1

原创 C++ const限定符 (一)

C++ const (一)2.1 基础使用关键字const可以对变量的类型加以限定,将其定义为一个常量const int buf_size = 512;任何试图为buf_size赋值的行为都会引发错误const对象必须初始化限制:只能在const类型的对象上执行不改变其内容的操作,例如初始化://利用一个对象去初始化另外一个对象,则是不是const都无关紧要int i = 42...

2021-09-26 16:41:00 46

原创 Linux高性能服务器编程学习笔记(一)高级I/O函数

高级I/O函数6.1 pipe函数pipe函数可用于创建一个管道,以实现进程间通信#include<unistd.h>int pipe(int fd[2]);参数是包含两个int型整数的数组指针成功返回0,并将一对打开的文件描述符写入数组,失败返回-1如果要实现双向传输则需要打开两个管道 read读取一个空管道或write写一个满的管道将阻塞 但是可以设...

2021-09-25 18:47:00 125

原创 Linux C++ 如何使用CMake

C++ CMakeCMake跨平台,可以快速生成MakefileCMake语法1.基本格式指令(参数1 参数2)参数之间不能使用,可以使用;或空格指令大小写无关,参数和变量区分大小写例如:set(HELLO hello.cpp)变量使用${}取值,在IF中直接使用变量名ADD_EXECUTABLE(hello main.cpp ${HELLO})使用方式和常用变量,指令...

2021-09-20 16:26:00 250

原创 二分查找(包括查找元素是第一次和最后出现的位置)

有序数组中的二分查找这篇文章用于复习二分的思想进入循环,不断的将数组的中间键(mid)和被查找的键比较,若相等则返回mid,若不等则算法会把查找范围缩小一半确定一个区间,使得目标值一定在区间中确定一个性质,使得此性质是二段性的,即为将数组分为连续的两段,其中一段满足性质,另一段不满足且答案是二段性的分界点整数二分整数二分分为两大类while(L<R){ M = (L+...

2021-09-16 22:22:00 358

原创 Linux C/C++开发环境和编译调试(一)

Linux C/C++开发环境和编译调试(一)1.安装相应的软件1.1 编译器/调试器sudo:切换到root并执行某命令sudo apt get:更新软件包的来源安装编译器和调试器:sudo apt install build-essential gab使用如下命令来确认软件版本和是否安装成功:gcc --versiong++ --versiongdb --version...

2021-09-15 20:53:00 437

原创 以元素的比较为基本运算的排序算法(一)快速排序,选择,冒泡,插入排序...

以元素的比较为基本运算的排序算法算法最坏情况平均情况插入排序O(n^2)O(n^2)冒泡排序O(n^2)O(n^2)快速排序O(n^2)O(nlogn)堆排序O(nlogn)O(nlogn)二分归并排序O(nlogn)O(nlogn)1. 插入排序序列 : 5 7 1 3 6 2 4将其从小到大排列从第二个元素开始,...

2021-09-09 17:38:00 152

原创 基于Linux的文件操作

Linux文件操作Linux中,socket被认为是文件的一种,所以在数据传输过程中可以使用文件I/O函数文件描述符文件描述符是系统分配给文件或socket的整数0:标准输入1:标准输出2:标准错误文件和套接字一般经过创建过程才会被分配文件描述符。但是上述3种输入输出对象即使未经过特殊的创建过程,程序开始运行后也会被自动分配文件描述符文件描述符知识为了方便称呼操作系统创建的文...

2021-09-06 15:42:00 52

原创 TCP/IP网络编程笔记-制作一个超简单的HTTP服务器

制作HTTP服务端Web服务器端:基于HTTP协议将网页对应文件传输给客户端的服务器端HTTP协议基于TCP/IP协议实现,是以超文本传输为目的而设计的应用层协议HTTP无状态的Stateless协议HTTP协议的请求及响应方式设计如图:服务端响应客户端的请求之后立即断开连接,服务端不会维持客户端状态,即使客户端再次发送请求,服务器端也无法辨认出保持状态的功能都是由Cookie和S...

2021-08-13 10:28:00 119

原创 sql语句(2)数据的更新(插入,修改和删除)

数据的更新1.创建数据库后创建表格CREATE TABLE Student( Sno char(9) not null, Sname char(20), Ssex char(2), Sage smallint, Sdept char(20) primary key (Sno));CREATE TABLE Course( Cno char(4) not null, Cn...

2021-05-02 11:09:00 834

原创 SQL单表查询部分记录(一)

SQL单表查询部分记录(一)建立表:create table Student(Sno char(9) primary key,Sname char(20) UNIQUE,Ssex char(2),Sage smallint,Sdept char(20));create table Course(Cno char(4) primary key,Cname char(40),...

2021-03-30 19:40:00 24

原创 Linux系统压缩指令(一) zip文件,tar.gz文件, gz文件

Linux系统压缩指令(一) zip文件,tar.gz文件, gz文件Linux系统中常见的压缩文件扩展名*.zip zip 程序压缩的文件;*.gz gzip 程序压缩的文件;*.bz2 bzip2 程序压缩的文件;*.xz xz 程序压缩的文件;*.tar tar 程序打包的数据,没有压缩;*.tar.gz ...

2021-03-28 14:02:00 543

原创 将博客搬至CSDN

搬家啦

2021-03-27 19:08:00 20

原创 进程(二)线程管理

进程(二)线程管理1.为什么使用线程?进程之间空间之间相互是独立的,进程A不能直接访问进程B的内存空间如果想要访问就需要操作系统做通讯(开销大)解决:线程线程 = 进程的管理功能-共享资源的管理线程的优点:(1)一个进程中可以同时存在多个线程(2)各个线程之间可以并发的执行(3)各个线程之间可以共享地址空间和文件等资源线程的缺点:一个线程崩溃,会导致其所属进程的所...

2021-03-26 22:46:00 68

空空如也

空空如也

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

TA关注的人

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