自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 静态库、共享库的封装与使用

静态库​ 就是目标文件的集合,调用静态库文件就是把静态库中二进制指令拷贝到你的可执行文件中​ 优点:速度相对比共享库较快,可执行文件运行时不需要依赖静态库​ 缺点:可执行文件相对较大,当静态库修改后,可执行文件需要重新编译。例如现在有一个hello函数需要封装1、编写hello.c文件#include <stdio.h>void hello(void){ printf("hello,world\n");}2、编译hello.c文件生成目标文件hello.ogcc -c

2021-05-31 16:37:16 182

原创 cJSON基础介绍-简单使用样例

cJSONjson的基础介绍​ JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范) 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。json常用于对象的序列化,和反序列化。cJSON的核心实现机制​ 在C环境中使用json需

2021-05-31 14:16:31 978 1

原创 Ubuntu12.04的MySQL安装

注释:(安装前先看一下,版本不同天差地别)查看Ubuntu版本指令 我的ubuntu版本 12.04 lsb_release -a查看MySql数据库 我安装的Mysql版本 Server version: 5.5.22-0ubuntu1 (Ubuntu) mysql -v(没安装肯定用不了啦~)1、更新软件源(至于apt无效语句的,先去装apt) sudo apt-get update3、安装数据库及相关软件包 sudo apt-get install mysql-se

2021-05-18 14:46:29 266 2

原创 Qt_网络

Qt网络​ Qt中进行网络通信时,需要在.pro文件中的 QT 添加 network模块。​ 注意:Qt应用程序的主线程要用来维护界面,因此不能使用阻塞模式来读取数据。 QHostAddress 用来表示网络地址 QHostAddress(const QString &address); 以字符串方式创建网络地址类。 toString 把ip地址转换成字符 特殊地址: QHostAddress::Null, QHostAddr

2021-05-13 13:35:18 197

原创 Qt_画家类,多线程

一、Qt绘图​ 在Qt中使用QPainter类绘制图形、图片,但该类只能工作在painterEvent事件函数中,因此必须覆盖此函数。​ 1、在控件上绘制图片​ 1、创建image对象,需要提供图文件的路径。​ 2、QPainter对象,需要提供控件的地址。​ 3、调用它drawImage函数,绘制图片,需要提供一个绘制区域。​ sx,sy,ex,ey。​ 2、绘制图形​ 1、设置画笔​

2021-05-13 13:34:24 794 1

原创 Qt_样式表

一、样式表​ 是一种类似HTML的CSS语法,用于设置控件的样式,Qt给这种语法命名QSS​ 设置方式一:​ 在界面设计器中,选中控件右键改变样式表。​ 设置方式二:​ 在代码中,调用setstylesheet函数镜像设置。​ 样式表的继承与覆盖:​ 控件的样式表有两个来源:​ 1、系统默认设置​ 2、继承父窗口​ 如果为控件设置了样式表,会覆盖系统默认的,父类继承来的样式该​ 常用设置项: color 控件内容的颜色 background-color 控件的背

2021-05-13 13:33:38 160

原创 Qt_布局-事件

界面布局:​ 在界面上直接设置控件的位置和大小可能会面临用户修改界面大小的问题,这样可能会导致界面布局混乱。1、绝对位置布局:​ 限制窗口的大小,设置窗口的最大、最小高度和宽度,让用户无法修改界面的大小。​ minmumSize (w,h)​ maxmumSize (w,h)​ 然后计算每个控件的大小和位置。2、相对位置布局:​ 1、当窗口的大小发生变化,会自动调用它的resizeEvent函数,该函

2021-05-13 13:32:47 303

原创 Qt_各种控件介绍

一、输入类控件1、QLineEdit 单选文本框,主要用来从界面获取数据,常用于获取用户名密码。 常用设置: 字体字号设置 垂直、水平对齐设置 只读设置 输入模式: Normal 正常模式 NoEcho 不显示输入的内容 PassWord 以 *代码输入的内容 PassWordEchoOnEdit 编辑时显示内容,完成后显示 * 常用信号: tex

2021-05-13 13:31:50 3119

原创 Qt_槽信号-控件介绍

一、自定义信号和槽​ 1、信号和槽必须定义在类中,并且该类必须继承Qt中的某个类,一般选择继承Object。​ 2、必须在类中开头的部分写Q_OBJECT没有分号。如果在项目构建前没有Q_OBJECT,信号与槽连接就会失败,​ 哪怕后来添加了Q_OBJECT也会出现以下错误。 错误:undefined reference to 'vtable for Test' 解决办法:找到该文件的路径,删除自动生成的所有文件,用qmake -project qmake make 手动编译。再打开pro就可以了

2021-05-13 13:30:52 239

原创 Qt_介绍创建

Qt1、什么是Qt​ 图形用户界面应用程序开发框架、是对底层的应用程序编程接口进行面向对象的封装,是一套基于C++语言的类库。​ 专注但不局限于用户界面开发,也可以进行系统调用,网络通信,数据库,2D/3D 建模,图像处理,音视频处理。​ 特点:跨平台,支持linux,Windows,MacOS,IOS,Android系统2、为什么选择Qt​ 基于C++语言简单应用,优良的跨平台特性,现阶段在个人计算机,工控,嵌入式的界面占据主导地位。3、环境与工具​ 工具:​ Qt

2021-05-13 13:28:51 280 1

原创 STL模板库-2

deque容器:​ 头文件:#include ​ 双端队列容器,依然采用队列的管理规则只能两端进出数据,与普通队列不同的是,它的两端都可以进出。​ 其实就是在向量的基础上增加了两端管理的功能。 构造函数: deque( size_type size ); 功能:创建一个大小为size的双向队列 deque( size_type num, const TYPE &val ); 功能:创建一个双向对象并放置num个值为val的元素

2021-04-19 21:23:13 63

原创 STL模板库-1

STL模板库​ Standard Template Library缩写,中文名叫做标准模板库。由惠普实验室提供,​ 共有三类内容:​ 容器:以类模板形式实现的常用数据结构,如:栈、队列、链式表、顺序表、红黑树。没图​ 算法:以函数模板形式实现的常用算法。如max,min,find,sort,swap​ 迭代器:是容器的成员,用于帮助访问容器中的元素,使用方法类似于指针。 #include <algorithm> iterator find( iterator start, iter

2021-04-16 21:03:13 94

原创 C++ day07

一、什么是模板​ 是一种自动生成代码的技术、这种技术能让程序员在编写代码中不需要考虑数据类型,这种技术被称为泛型编程技术。二、为什么使用模板​ 1、C++/C 是一种静态编程语言(预处理->编译->汇编->链接->可执行文件)。​ 静态语言的优点:运行速度快​ 静态语言的缺点:实现通用的代码比较麻烦​ 例如:实现一个通用的快速排序算法。参考qsort()#include <stdio.h>#include <string.h>//快排,未知

2021-04-15 21:10:29 78

原创 C++ day06

补充一个工厂模式 #include <iostream> using namespace std; //定义一个枚举 enum ClassType { ClassA, ClassB, ClassC, ClassD }; //定义一个基类 class Base { public: virtual void whoami(void) =

2021-04-14 18:41:03 63

原创 C++ day05

一、什么是继承​ 1、当遇到问题时,先查看现有的类能否解决一部分问题,如果有则继承该类,在此类的基础上进行扩展来解决问题。​ 可以缩短解决问题的时间(代码复用)​ 2、当遇到复杂问题时,可以把复杂问题分解成若干个小问题,然后为每个问题设计一个类进行解决,最终通过继承语法​ 把这些类汇总在一个类中,达到解决问题的目的。这种处理方式可以让多人完成,以此来降低解决问题的难度。二、基础的语法​ 1、继承表 class Test:继承表[继承方式 父类] { 成员变量; public: 成员

2021-04-13 16:57:10 135

原创 String类的结构设计符号重载

String类的 运算符重载#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>using namespace std;class String{ char* c_str;public: //构造,包含无参构造 String(const char* str="") { //利用malloc的方法 没有运用new是考虑到后面的

2021-04-13 09:59:28 121

原创 linux常用脚本配置-vimrc-bashrc

终端的配置文件​ 打开终端的配置文件 gedit~/ .bashrc 文件​ 更改配置文件 建议复制粘贴定义变量,保存退出,关闭gedit​ source ~/.bashrc 重新加载bashrc,使更改生效简单的脚本文件:​ 脚本:由系统命令组成的带有执行权限的文本文件,执行脚本文件时被命令解释器读取并且执行​ 创建一个脚本 cmd.sh —生成文件​ 打开脚本 gedit cmd.sh​ 例如给指令: touch a.c touch a.h 保存退出

2021-04-12 09:20:54 266

原创 C++ day04

一、运算符符函数​ 在C++中会把运算符当做函数处理,一个表达式,其实是调用了很多运算符函数完成计算的。​ 这种特性对内建类型没有用处,对自建类型用处极大,个性化设计,提高代码可读性易用性。​ 运算符函数的格式:​ 单目运算符:#o|o# 会被编译器解释为 成员函数: [ ] O::operator#(void) { } 返回值不确定,唯一的参数是调用者 全局函数: [ ] operator#(O&)

2021-04-09 20:47:19 67

原创 C++ 酒店管理雏形

1、基本需求二、编写make fileCC=g++FLAG=-Wall -WerrorOBJ=main.o hotel.o tools.oBIN=HMSall:$(OBJ) $(CC) $(OBJ) -o $(BIN) && ./$(BIN) hotel.conf %.o:%.cpp $(CC) -c $(FLAG) $< -o $@ clean: rm -rf *.h.gch *~ rm -rf $(OBJ) $(BIN)三、头文件类tool.h

2021-04-08 20:52:08 182

原创 Cpp day03

思考​ 对象在创建时,销毁时,分别完成了哪些工作?一、对象的创建和销毁过程1、对象的创建过程​ a、给对象划分内存空间(栈,堆)​ b、执行初始化列表​ 根据继承者的顺序调用父类的无参构造函数,也可以调用有参构造,类名(参数)​ 根据成员的定义顺序调用类类型成员的构造函数,也可以调用有参构造,类名(参数)​ 初始化成员​ c、执行构造函数,申请资源2、对象的销毁过程​ a、执行析构函数,释放资源​ b、根据成员的定义顺序逆序调用类类型成员的析构函数​ c、根据继承表顺序逆序调

2021-04-07 20:55:05 76

原创 Cpp day02

一、什么是默认形参​ 在C++中可以给函数的参数设置默认值,当函数被调用时如果调用者提供了实参则使用实参,如果没提供则使用默认值。1、默认形参要靠右​ 如果函数有多个参数,设置了默认形参要从右到左连续排列。2、只在声明设置设置默认形参​ 如果函数的声明和定义分开实现,只在函数声明时设置默认形参即,否则会出现语法错误。3、默认形参可能会影响重载的效果​ 如果对函数进行了重载双设置的默认形参,调用时可能会造成冲突。​ 因此为重载过的函数设置默认形参时一定要慎重。二

2021-04-06 11:56:42 94

原创 Cpp day01

C++​ 本贾尼·尼特芝斯特鲁普,于1979年4月份在贝尔实验室在分析UNIX系统分布内核的流量时,特别希望有一种更加模块化的工具,于是在1979年10月开始着手开发一种新的编程语言,在c语言的基础上增加了面向对象机制。在1983年完成了Cpp第一个版本一、C++与C的区别​ 1、C++完全兼容C的所有内容​ 2、支持面向对象的编程思想​ 3、支持运算符重载,函数重载的编译时多态机制​ 4、支持泛型编程,模板机制​ 5、支持异常处理​ 6、类型检查更严格 说起来比C安全 但是未必​ 7、注

2021-04-01 17:56:25 98

原创 聊天室-线程池-tcp

聊天室-线程池-tcp项目介绍​ 客户端​ 1、注册昵称 2、发送消息|接收消息 3、创建登录,注册界面(待补充)​ 服务端​ 1、等待客户端连接 2、接收客户端信息 3、通知所有人xxx进入了聊天室 4、接收其他所有消息 5、xxx退出了聊天室基础准备​ 这里用到了network和pthreadpool的工具queue.h#ifndef QUEUE_H#define QUEUE_H#include <stdbool.h>//基本的队列结构体typedef str

2021-03-31 21:23:59 477 3

原创 阿里云服务器mysql安装-远程连接

服务器中安装配置MYSQL数据库完整教程第一步: 确保服务器系统处于最新状态(这步操作可有可无)[root@localhost ~]# yum -y update如果显示以下内容说明已经更新完成Replaced:grub2.x86_64 1:2.02-0.64.el7.centos grub2-tools.x86_64 1:2.02-0.64.el7.centosComplete!第二步: 重启服务器(这步操作也可以跳过)[root@localhost ~]# reboot第三步:

2021-03-31 20:42:36 188

原创 线程池

线程池​ 利用一个队列作为线程池的存放容器queue.h#ifndef QUEUE_H#define QUEUE_H#include <stdbool.h>#include <stdio.h>#include <stdlib.h>typedef struct Queue{ void** arr; int cal; int front; int rear;}Queue;//创建队列Queue* create_queue(int cal);

2021-03-31 08:43:51 74

原创 进程与线程基础

线程管理线程介绍​ 什么是线程:线程就是进程中负责执行的部分,是进程内部的控制序列,它是轻量级的,​ 它没有:独立的内存资源,代码段,数据段,堆区,环境变量,命令行参数,文件描述符,信号处理函数,当前工作目录。​ 它有:线程拥有独立的栈内存,也就是它自己的局部变量​ 一个进程中可以创建多个线程,一个进程中至少有一个线程(主线程),也可以再创建多个线程。注意:进程是个资源单位,而线程是个执行单位,线程是进程的一部分,进程中正是有了线程才能动起来POSIX线程​ 1、早期各计算机厂商自己提供是

2021-03-29 20:43:27 67

原创 生产者消费者模型

生产者消费者​ 生产者:生产数据的线程​ 消费者:使用,处理数据的线程​ 缓冲区:隔离生产者和消费者,这样可以避免相互等待,提高运行效率​​ 生产者快于消费者:缓冲区爆满​ 消费者快于生产者:缓冲区一直空​​ 使用条件变量可以解决生产者与消费者之间效率不匹配的问题​ 生产者快于消费者:通知消费者加速消费,生产者睡眠降低生产速度。​ 消费者快于生产者,通知生产者加速生产,消费机睡眠降低消费速度。​​ pcm.c#include <stdio.h>#include &lt

2021-03-29 20:41:27 84

原创 模拟FTP客户端

FTP客户端项目准备:在ubuntu系统上搭建FTP服务器搭建ftp服务器:1、sudo apt-get install vsftpd2、sudo vi /etc/vsftpd.conf 打开配置文件anonymous_enable=NO 禁止匿名用户登录local_enable=YES 开户本地用户登录write_enable=YES 开户上传权限2、service vsftpd restart 重启ftp服务器3、使用FlashFXP与FTP服务器通信,查看通信过程,解析协

2021-03-25 21:36:41 442

原创 多路复用基础

多路复用​ 使用一个进程(且只有主线程)同时监控若干个文件描述符的读写,这种读写模式叫多路复用。​ 多用于tcp的服务端,用于监控客户端的连接和数据的收发。​ 优点:​ 1、不需要频繁的创建进程​ 2、销毁进程从而节约了内存资源、时间资源​ 3、避免了进程之间的竞争和等待​ 缺点:​ 1、单个客户端任务不能太耗时、否则其他客户端就会感知到卡顿。​ 适用环境:​ 并发量高,但是任务量短小不耗时。例如web服务器最难用的selectselect: int select(int

2021-03-22 16:03:53 192

原创 基于TCP的五子棋对战

实现网络对战的五子棋游戏基本逻辑玩家A玩家B下棋(x,y)等待A玩家发送新坐标发送(x,y)等待A玩家发送新坐标等待B玩家发送新坐标接收玩家A(x,y)等待B玩家发送新坐标下棋(x,y)接受玩家B 下棋坐标发送(x,y)利用标志位变换来判断接收还是发送 //一开始pop=0 所以是接收 if(pop%2 == 0) { char buf[4096] = {}; int ret = read(cli_fd,buf,sizeo

2021-03-19 18:32:16 1191 6

原创 封装TCP/UDP函数

封装TCP/UDP函数nwtwork.h#ifndef NETWORK_H#define NETWORK_H#include <stdio.h>#include <stdbool.h>#include <netinet/in.h>typedef struct NetWork{ int type; int sock_fd; struct sockaddr_in addr; socklen_t addrlen; bool issvr;}NetWo

2021-03-18 20:44:43 195

原创 不同计算机的进程通信-Socket

网络编程​ 底层遵循了TCP/IP协议,在系统底层以Socket接口方式呈现。基于TCP协议的网络通信模型:服务端服务端创建Socket对象创建socket对象准备通信地址准备通信地址+端口号绑定socket对象和通信地址连接服务器设置监听和排队数量等待客户端连接分配一个新的socket对象为客户端服务+进程或线程接受请求发送请求响应请求接受响应关闭socket关闭socketTCP使用到的函数: in

2021-03-18 20:43:35 551

原创 同一计算机的进程通信-Socket

进程间通信-Socket​ socket是一种借口技术,可以让不同的进程进行同行,有两种通信方式​ 既可以是同一个计算机上的进程,也可以是不同计算机上的进程。同一计算机的进程通信​ 需要借助socket的文件,进行通信 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 功能:创建socket对象

2021-03-18 10:24:11 1628

原创 基于消息队列的银行系统-部分功能

基于消息队列的银行系统基本需求:​ 1、分为客户端和服务端(c/s架构)​ 2、服务端与每个客户端通信、满足它们的各种请求​ 3、客户端主要功能:​ 1、开户 2、销户 3、解锁 4、退出​ 5、登录 6、查询 7、存钱 8、取款​ 9、转账 10、修改密码​ 4、推荐使用的技术:消息队列 + vfork + exec系统函数Make fileCC=gccSTD=-std=gnu99FLAG=-Wall -WerrorBIN=open destory unlock login

2021-03-17 21:01:51 928 1

原创 计算机网络基础知识

计算机网络基础知识1、什么是计算机网络把分布在不同地理位置的计算机与专门的网络设备用通信线路互相连成一个规模大、功能强的系统,从而使众多计算机可以方便地互相传递信息、共享软件、硬件、数据信息等。 计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的的集合,它是计算机技术和通信技术相结合的产物。2、计算机网络功能​ 数据通信、资源共享、提高系统可靠性、分布式网络处理和负载均衡3、计算机网络组成1、通信子网​ 1-1、网卡:网络接口卡或网络适配器、它负责将数据发送到网络去,也负责从

2021-03-17 20:36:08 575

原创 常见的链表面试题

常见的链表面试题设计一个链表typedef struct Node{ int data; struct Node* next;}Node;typedef struct List{ Node* head; //头指针 Node* tail; //尾指针 size_t size; //节点个数}List;1、链表逆序(不是改变值,该指针,要求不适用额外空间)int reverse_list(List* list){ Node* tmp = NULL; Node* c

2021-03-14 17:33:18 234

原创 UNIX Environmental programming Week2.Day5

进程间通信基本概念什么是进程间通信​ 是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立的,为了能够让多个进程协同工作必须交换数据进程间通信的分类​ 简单的进程间通信:信号、文件、环境变量、命令行参数​ 传统的进程间通信:管道文件​ XSI进程间通信:共享内存、消息队列、信号量​ 网络进程通信:Socket套接字传统的进程间通信​ 管道是UNIX最古老的进程间通信方式,古老意味着所有系统都支持,早期的管道是半双工的,现在有些系统的管道是全双工​ 管道就是一种特殊的文件

2021-03-12 16:48:24 59

原创 常用排序算法

常用排序算法1.冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度稳定性n^2nn^2O(1)稳定#define swap(a,b) {typeof(a) t=a;a=b;b

2021-03-11 20:24:27 130

原创 UNIX Environmental programming Week2.Day4

进程的正常退出​ 1、在main函数中执行return n语句,该返回值可以被父进程接收​ 2、调用了exit函数,该函数是标准库函数 void exit(int status); 功能:在任意时候调用了此函数都可以结束进程 status:结束状态码,与return函数中的返回值效果一样 注意:该函数不会返回 进程退出前完成 int atexit(void (*functioin)(void)); 功能:注册一个进程结束前要执行的函数 int on_e

2021-03-11 16:52:37 61

原创 UNIX Environmental programming Week2.Day3

进程基本概念进程与程序​ 程序就是存储在磁盘上的可执行文件,程序被夹在到内存中开始运行进程​ 一个程序被多次加载时生成了多个进程​ 进程就是处于活动状态的计算机程序进程的分类​ 进程一般分成三个类型:交互进程,批处理进程,守护进程​ 守护进程一般处于活跃状态,运行在后台由系统一开机的时通过批处理或者启动脚本决定的来自动创建的查看进程​ 简单的方式 ps 显示当前用户有控制终端的进程信息​ 列表方式 ps auxw 显示所有进程的详细信息​ a 所有用户的控制终端的进程​ u 显示进程

2021-03-10 20:25:52 76

空空如也

空空如也

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

TA关注的人

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