自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (4)
  • 收藏
  • 关注

原创 ESP8266_RTOS_SDK AP和Station功能实现

SDK开发工具集选择乐鑫配置:VirtualBox + Linux +交叉编译工具使用的是以下这块开发板Lubuntu是一个轻量级系统(由乐鑫官方提供)source insight 编辑代码为了便于我们开发,需要在window下D盘下新建VM共享目录VM下新建share目录挂载共享目录ls:查看当前目录文件./mount.ch:运行shell脚本输入root密码:espressif在Share目录下,新建文件夹demo在window下查看是否同步。

2023-08-09 15:30:51 411

原创 ICM42688笔记

个人笔记

2022-09-08 11:21:36 7551 22

原创 网络编程在线英英词典之历史查询模块(六)

客户端历史查询模块服务器历史查询模块功能测试

2022-06-23 17:47:43 291 1

原创 网络编程在线英英词典之查询模块(五)

客户端查询单词功能服务器查询单词功能测试功能

2022-06-23 17:47:20 292

原创 网络编程在线英英词典之登录模块实现(四)

客户端登录模块服务器登录模块验证登录模块

2022-06-22 17:50:04 203

原创 网络编程在线英英词典之注册模块实现(三)

客户端注册模块服务器注册模块编译通过后,就可以进行用户注册测试右边命令终端是在客户端中进行用户注册操作左边命令终端是在数据库中查看是否创建成功打开数据库验证后,出现zhangsan|123,确实成功注册了注册模块功能已经实现下面进行登录模块功能的实现.........

2022-06-22 15:31:33 307

原创 网络编程在线英英词典之服务器代码框架搭建(二)

服务器框架搭建完后,可以进行一个初步的测试先创建一个数据库创建usr表和record表创建一个my.db数据库创建用户表创建历史记录表然后进行一个客户端并发连接服务器的验证(目前还只能进行客户端的连接操作,其他功能还未实现)成功打开了2个客户端,说明前面的框架搭建没有问题通过命令可以查看关闭客户端后是否产生僵尸进程在1个服务器和2个客户端都运行的情况下可以查看到相应的进程关闭一个客户端后,查看有没有僵尸进程通过下图,可以看到并没有产生僵尸进程再把另一个客户端也关闭,也没有僵尸进程

2022-06-22 10:33:38 395

原创 网络编程在线英英词典之客户端代码框架搭建(一)

1,用户注册(已有用户不能注册)2,用户登录3,用户查询单词4,用户查询历史查询记录3,并发客户端客户端框架这样客户端的框架就搭建好了,具体效果现在还看不出通过编译一下,能成功编译就行下一篇进行服务器的框架搭建.........

2022-06-22 10:32:40 306

原创 c++模板及STL标准模板库

类型模板之模板函数与模板类非类型模板以及特化链表实现迭代器STL容器STL算法

2022-05-18 17:38:27 149

原创 c++开发之多态、异常、转换函数

多态多态概念: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。#include <iostream>using namespace std;class A{public: A(){ } ~AX(){ } void show() { cout<<"AAAAAAAAAAAAA"<<endl; } };class AX:public A{public: voi

2022-04-27 14:34:32 138

原创 从C到C++及类与对象

语法升级c++中 &不仅有取地址的作用,还能作为引用引用 (&) : 可以理解为是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样引用的作用示例在C语言中调换2个变量的值,需要通过指针操作,比较复杂,引用可以简化这种操作//指针操作对换变量数值#include <stdio.h>void swap(int *p, int *q){ *p ^= *q; //0110 0100 ^ 0000 1010 = 0110 1110 *q ^= *p;

2022-04-25 14:15:22 114

原创 C++运算符重载及组合与继承

普通运算符重载数学运算符关系运算符+ - * / ++ –== >= <= !=C++准许以运算符命名函数string a = "hello";a += "world"; //+(a, "world");count<< "hello"; //<<(count, "hello"); 将hello传递给count打印出来#include <stdio.h>#include <unistd.h>#

2022-04-25 14:13:50 315

原创 TCP、IP协议原理

1、wireshark抓包工具使用下载wireshark抓包工具Linux下sudo apt-get install wireshark启动wireshark sudo wireshark点击options选择网卡,设置过滤器抓包的过程详细的抓包分析,请参考这篇文章2、eth_ip头原理以太网头ip头3、TCP包头-确认重发机制TCP时一种面向连接的,可靠的数据传输TCP头部1. TCP把所有要发送的数据进行编号(每一个字节用一个号)2.发送时从当前数据位置,发送w

2022-04-20 16:10:53 1593

原创 IO多路复用

1、什么是多路复用IO多路复用(IO Multiplexing)一种同步IO模型,单个进程/线程就可以同时处理多个IO请求。一个进程/线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个进程/线程。一个进程/线程虽然任一时刻只能处理一个请求,但是处理每个请求的事件时,耗时控制在 1 毫秒以内,这样 1 秒内就可以处理上千个请求,把时间拉长来看,多个请求复用了一个进程/线程,这就是多路复用,这

2022-04-20 11:05:17 23101 1

原创 UDP编程

网络编程API扩展及UDP网络发送数据:send()/write()#include<sys/types.h>#include<sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t len, int flags);#include<unistd.h>ssize_t write(int fd, const void *buf, size_t count);send()比write()多

2022-04-13 15:39:09 998

原创 TCP编程

TCP编程API1.socket()函数#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);1.1 参数: 1.domain: AF_INET IPv4 Internet protocols ip(7) AF_INET6 IPv6 Internet pro

2022-04-11 15:17:29 3017

原创 网络编程之网络基础

一、网络采用分层思想:1.每一层实现不同的功能,对上层的数据做透明传输2.每一层向上层提供服务,同时使用下层提供的服务下图为网络分成和各层主要的协议网络层:三层交换机数据链路层:二层交换机二、各层典型的协议:1.网络接口与物理层MAC地址: 48位全球唯一,网络设备的身份标识ARP/RARP:ARP: IP地址----->MAC地址RARP: MAC地址—>IP地址PPP协议: 拨号协议(GPRS/3G/4G)2.网络层IP地址IP: Internet proto

2022-04-08 10:54:25 549

原创 消息队列和信号灯

消息队列概念:消息队列是System V IPC对象的一种消息队列的使用:发送端:1 申请Key2打开/创建消息队列 msgget3向消息队列发送消息 msgsnd接收端:1打开/创建消息队列 msgget2从消息队列接收消息 msgrcv3 控制(删除)消息队列 msgctl打开/创建消息队列 #include <sys/ipc.h> #include <sys/msg.h> int msgget(key_t key, int

2022-04-07 10:40:54 141

原创 信号机制及实现

信号机制概念:信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式所有信号的产生及处理全部都是由内核完成的信号的产生:1 按键产生2 系统调用函数产生(比如raise, kill)3 硬件异常4 命令行产生 (kill)5 软件条件(比如被0除,访问非法内存等)信号处理方式:1 缺省方式2 忽略信号3 捕捉信号常用信号:信号名含义默认操作SIGHUP该信号在用户终端关闭时产生,通常是发给和该终端关联的会话内的所有进程终止SIGINT该信号在

2022-04-06 15:39:32 1131

原创 共享内存的使用

内存映射(常用,重点掌握)概念:使一个磁盘文件与内存中的一个缓冲区相映射,进程可以像访问普通内存一样对文件进行访问,不必再调用read,write。mmap()的优点:实现了用户空间和内核空间的高效交互方式函数定义:void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED( ((void *

2022-04-03 16:57:04 1061

原创 有名管道和无名管道

进程间通信(IPC,InterProcess Communication)概念:就是进程和进程之间交换信息。常用通信方式(面试常问点)无名管道(pipe)有名管道 (fifo)信号(signal)共享内存(mmap)套接字(socket)过时的IPC通信方式System V IPC(它也包含一下三种通信方式)共享内存(share memory)消息队列(message queue)信号灯集(semaphore set)无名管道无名管道特点:只能用于具有亲缘关系的进程之间的通信

2022-04-03 11:30:07 683

原创 条件变量和线程池

条件变量应用场景:生产者和消费者的问题,是线程同步的一种手段。必要性:为了实现等待某个资源,让线程休眠。提高运行效率int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict m

2022-04-01 17:29:29 414

原创 线程的取消和互斥

线程的取消:意义:随时杀掉一个线程int pthread_cancel(pthread_t thread);注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是 阻塞的系统调用(阻塞的地方就是取消点)运行段错误调试:可以使用gdb调试使用gdb 运行代码,gdb ./youapp(gdb) run等待出现Thread 1 “pcancel” received signal SIGSEGV, Segmentation fault.输入命令bt(打印调用栈)(gdb) b

2022-03-31 15:36:13 2055

原创 进程、线程和进程间通信(线程的创建和回收)

线程的创建 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*routine)(void *), void *arg);成功返回0,失败时返回错误码thread 线程对象attr 线程属性,NULL代表默认属性routine 线程执行的函数arg 传递给routine的参数 ,参数是void * ,注意传递参数格式,编译错

2022-03-30 17:05:06 799

原创 exec函数族和守护进程

exec 函数族背景:fork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。作用:执行指定的程序(进程调用exec函数族执行某个程序,进程当前内容被指定的程序替换,实现让父子进程执行不同的程序父进程创建子进程,子进程调用exec函数族,父进程不受影响)#include <unistd.h> int execl(const char *path, const char *arg, …); int execlp(const cha

2022-03-29 17:15:03 977

原创 进程、线程和进程间通信(进程的创建和回收)

进程概念程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称进程是程序的一次执行过程动态的,包括创建、调度、执行和消亡进程和程序内容区别进程包含的内容:BSS段:存放程序中未初始化的全局变量数据段:已初始化的全局变量代码段:程序执行代码堆(heap):malloc等函数分配内存栈(stack):局部变量,函数参数,函数的返回值进程控制块(pcb):PID, 进程优先级,文件描述符表下图为面试常问点进程类型交互进程:在shell下启动。

2022-03-28 09:52:06 736

原创 目录操作和库的使用

打开目录#include <dirent.h>DIR *opendir(const char *name);DIR *fdopendir(int fd); 使用文件描述符,要配合open函数使用DIR是用来描述一个打开的目录文件的结构体类型成功时返回目录流指针;出错时返回NULL读取目录#include <dirent.h>struct dirent *readdir(DIR *dirp);struct dirent是用来描述目录流中一个目录项的结构体类型

2022-03-24 21:02:58 1095

原创 文件I/O

文件IO的概念:什么是文件IO,又称系统IO,系统调用是操作系统提供的API接口函数。POSIX接口 (了解)注意:文件IO不提供缓冲机制文件IO的APIopen close read read文件描述符概念:英文:缩写fd(file descriptor)是0-1023的数字,表示文件。0, 1, 2 的含义 标准输入,标准输出,错误文件IO 打开//openint open(const char *pathname, int flags); //不创建文件int ope

2022-03-24 15:33:34 1383

原创 流刷新定位、格式化输入输出

流的刷新 int fflush(FILE *fp);成功时返回0;出错时返回EOF将流缓冲区中的数据写入实际的文件Linux下只能刷新输出缓冲区,输入缓冲区丢弃如果输出到屏幕使用fflush(stdout)加了fflush()函数才能打印出来。流的定位long ftell(FILE *stream);//函数获取一个文件指针的当前位置long fseek(FILE *stream, long offset, int whence);void rewind(FILE *stream)

2022-03-23 11:48:43 288

原创 标准IO概述与操作

标准IO介绍标准io(input/output)就是标准接口的意思1、文件的概念和类型(了解)2、如何理解标准IO(了解)3、流(FILE)的含义(了解)4、流的缓冲类型(熟练)缓冲区实验//不输出#include <stdio.h>#include <unistd.h>int main(int argc,char*argv[]){ printf("hello world"); while(1){ sleep(1); }}

2022-03-22 16:17:07 1923

原创 数据结构(八)——排序

1、排序定义2、内排序方法主要有插入排序、交换排序、选择排序和归并排序,这里着重介绍插入排序和交换排序。插入排序又可以细分为直接插入排序、折半插入排序、链表插入排序、shell(希尔)排序等。交换排序可以分为“起泡”排序和“快速”排序3、快速排序的实现//自己实现的快速排序#include <stdio.h>#include <stdlib.h>#define N 15int partion(int *data, int low, int

2022-03-21 21:15:24 397

原创 数据结构(七)——查找

查找概念查找方法查找-平均查找长度顺序表的查找顺序查找算法及分析折半查找算法及分析分块查找算法及分析Hash表的查找保留除数法哈希表实现//hash.h#ifndef _HASH_#define _HASH_#define N 15typedef int datatype;typedef struct node { datatype key; datatype value; str

2022-03-15 17:50:42 170

原创 数据结构(六)——树的概念及实现

树的介绍二叉树概念二叉树性质二叉树的运算程序实现//tree.h#ifndef _TREE_H_#define _TREE_H_typedef char data_t;typedef struct node_t { data_t data; struct node_t * left; struct node_t * right;}bitree;bitree * tree_create();void preorder

2022-03-11 16:39:24 1162

原创 数据结构(五)——队列实现及其应用

1、顺序队列的原理队列是限制在两端进行插入操作和删除操作的线性表允许进行存入操作的一端称为“队尾”允许进行删除操作的一端称为“队头”当线性表中没有元素时,称为“空队”特点:先进先出(FIFO)双端队列2、顺序队列的实现声明结构体typedef int datatype;#define N 128typedef struct { datatype data[N]; int front; int rear;}sequeue;2.1 创建队列sequeue * q

2022-03-11 11:43:51 451

原创 数据结构(四)——栈实现及其应用

1、栈的概念栈是限制在一端进行插入或者删除操作的线性表(俗称堆栈)允许进行操作的一端称为“栈顶”另一固定端称为“栈底”当栈中没有元素时称为“空栈”特点:后进先出(LIFO)栈的应用:解决非线性问题,通过一个栈把问题线性化。2、栈的创建typedef int data_t;//先定义一个结构体typedef strcut{ data_t *data; int maxlen; int top;}sqstack;以32位的系统为例,指针为4个字节,int为4个字节,所以该结构体

2022-03-09 16:04:19 1520

原创 C语言 指针与数组

在C语言中,数组的指针是指数组在内存中的起始地址,-----数组元素的地址是指数组元素在内存中的起始地址一维数组的数组名为一维数组的指针(起始地址)下面用代码验证一下 x[i],(px+i),(x+i)和px[i]是否具有相同功能(访问数组第i+1个数组元素)。#include <stdio.h>int main(int argc, char *argv[]){ int a[] = {1, 3, 5, 7, 9}; int *p, i, n; p = a; n = size

2022-03-09 15:51:52 2962

原创 链表基础操作总结

链表的内存申请和释放

2022-03-09 09:55:50 462

原创 Samba更换Sourceinsight+共享文件夹教程

原理介绍:Samba服务器经常会出现网络问题,而且错误很难排查,有时候影响你工作效率,如:但是采用sourceinsight和共享文件夹结合的方式就可以有效的避免上述问题,共享文件夹作为Ubuntu环境和Windows环境进行文件交换的一个通道,那么我们可以尽可能的利用这个通道,比如Ubuntu下开发我们需要交叉编译环境,那么我们需要在Ubuntu下进行编译,make操作等,但是在Ubuntu里写驱动的代码又不方便,怎么办呢?可以在Windows下借助sourceinsight写驱动代码,然后将你的驱

2022-03-04 14:56:52 596

原创 samba服务的安装及配置

一、安装:sudo apt-get install samba二、配置:1、创建一个需要共享的目录,并修改权限:mkdir 1703sudo chmod 777 1703/ -R2、打开配置文件:sudo vim /etc/samba/smb.conf3、对创建的共享目录进行配置并保存退出:[1703]path = /home/lpf/1703available = yesbrowseable = yespublic = yeswritable = yes三、重起sam

2022-03-04 14:50:47 2103

原创 Makefile基础使用介绍,看完就能上手

1、Make简介工程管理器,顾名思义,指管理较多的文件。Make工程管理器也就是“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。Make将只编译改动的代码文件,而不用完全编译。2、Makefile基本结构Makefile是Make读入的唯一配置文件1、由make工具创建的目标体(target),通常是目标文件或可执行文件*(确定生成什么)*2、要创建的目标体所依赖的文件 (depe

2022-03-03 14:52:11 4833

在线词典项目中需要用到的单词表

在线词典项目中需要用到的单词表

2022-06-23

使用文件IO实现“每隔1秒向文件1.txt写入当前系统时间,行号递增”

使用文件IO实现“每隔1秒向文件1.txt写入当前系统时间,行号递增”

2022-03-24

Linux虚拟机与主机间文件传输(vmtools配置)

共享文件夹设置后不能正常使用,可能是vmtool没配置好,可以参考这篇配置

2022-03-04

Linux虚拟机与主机间文件传输(共享文件夹)

详细介绍设置过程,以及可能出现的问题

2022-03-04

空空如也

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

TA关注的人

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