自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 类外编写的方法

#include <iostream>#include <string.h>using namespace std;class base{ public: base(); ~base(); void show(); //声明一个 show 的接口 };//添加类的名字::函数名 void base::show(){ cout << "show base" << endl;}base::base(){ cout &

2022-04-23 23:22:14 170

原创 计算类的大小

普通类的大小class base { char a; short c; int b; };利用sizeof(base)编译可得出是8个字节结论:类的空间大小计算与 结构体空间大小计算是一样的。所以定义类的数据成员时,也应该从小 到 大排列,这样分配出来的空间最小带函数类的大小//带函数的类大小 class base1{ void test() { char a1; //因为这些变量都是在 test 函数中的局部变量,没有调用 test 函数时

2022-04-23 23:16:29 309

原创 new和malloc/calloc的区别

1.new 为对象分配堆空间时,会调用构造函数, malloc 就不会。​ 2.delete 释放对象的堆空间时,会调用析构函数,free 就不会。​ 3.new 为对象分配空间时,可以传递参数给构造函数使用, malloc 不行。#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;class base{public: .

2022-04-23 23:06:53 258

原创 类的构造函数和析构函数

构造函数构造函数的作用:在定义对象的时候,(系统自动) 初始化对象中的信息.构造函数的特点:1.构造函数没有返回值2.构造函数的名字必须与类名一致3.构造函数不需要用户调用,在创建对象的时候会自动调用4.构造函数的定义要在 公共区5.构造函数可以重载构造函数定义的语法:class 类名 { public: 类名() { }}例子: class test{ public: test(){cout <&l

2022-04-23 23:04:22 881

原创 c++中函数的重载和默认参数

函数的重载函数重载: 就是静态多态的一种设计方式实现原理:c++ 在编译的时候会 《自动检测》 ,函数,参数列表, 对于各个不同的参数进行函数的别名化,来产生这个函数的多种状态,然后根据用户传入的参数,来确定要执行那个 状态的函数。函数重载的注意事项1.函数重载必须要函数名一致2.函数重载的依据是参数列表的不同 (类型,个数)3.返回值类型不能作为重载的依据4.调用重载函数的时候,需要注意调用的 歧义void func(int a) ->func_int

2022-04-23 22:54:32 1585

原创 C++中的引用

引用:给已知的变量取一个别名,内存不会再次为该别名分配内存空间,节省内存空间。数据类型 &引用名 = 引用的变量名例子: int a=100;int &a1=a; //给变量a取一个别名 为 a1 , a1 和 a 操作的是同一个地址。当引用作为函数的参数在c++中一般参数的传递,能使用引用尽量使用,引用因为引用可以节省内存空间。 //传递引用的方式交互两个数据的值 int jiaohuan2(int &a,int &b) {

2022-04-21 14:10:42 775

原创 c++命名空间的跨文件使用

命名空间的语法:namespace xy //xy为空间名{ int a; int b; int c;};命名空间的使用:1、告诉编译器使用那个空间中的变量如:xy::a = 100;2、把整个命名空间暴露出来(整个空间内的内容可以直接访问)如:using namespace xy3、只暴露空间中某一成员如:using xy::a静态变量 :关键字:static:限制全局变量只能在当前文件中使用特点:改变变量的生命周期限制变量的作用域,只能作

2022-04-21 01:33:21 2733

原创 通过TCP通信进行文件收发

发送端:/************************************** 客户端**************************************/#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in

2022-04-19 15:36:47 402

原创 通过TCP通信完成在线聊天

客户端:/************************************** 客户端**************************************/#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <sys/socket.h>#include <netinet/in

2022-04-19 15:18:30 172

原创 UDP的单播广播和组播

单播数据的发送函数:ssize_t sendto(int sockfd, //UDP 通信SOCKET const void *buf,//数据的缓存区size_t len, //需要发送的数据大小int flags, //发送方式 0 阻塞 非0 不阻塞const struct sockaddr *dest_addr, //接收者的IP地址信息socklen_t addrlen);//接收者的IP地址的大小数据的接收函数:ssize_t recvfro

2022-04-19 15:13:05 2379

原创 Linux中HTTP的请求

HTTP请求的步骤:1.建立TCP 通信连接2.制定HTTP协议例如: GET / HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n3.发送制定好的HTTP协议4.接收服务器所返回的数据,完成一次HTTP请求注意:HTTP请求的默认端口为 80如果要获取服务器的IP地址:1.可以通过gethostbyname获取。在浏览器中按 F12 再按F5 点击相应的连接获取IP地址#include <stdio.h>#include <stdio.

2022-04-19 14:30:53 3561

原创 TCP通信流程

TCP: 可靠传输协议,速度慢,一般用于文件,与控制指令的传输。查看网络IP地址: ifconfig设置网络的IP地址信息: ifconfig 网卡设备号 网络IP地址 例子:ifconfig ens33192.168.5.2设置网关地址: route add default gw 192.168.5.1------TCP 通信流程-----客户端:1.创建通信对象2.设置服务器的地址信息3.链接到服务器中4.进行数据的交互5.关闭通信服务器

2022-04-16 13:29:12 1406

原创 线程间通信的两种方式:消息队列、共享内存

一、消息队列#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <strings.h>#include <stdio.h>#include <sys/ipc.h>#includ

2022-03-29 17:47:34 868

原创 条件变量的使用

1. 初始化条件变量1) 动态初始化 — pthread_cond_init() --> man 3 pthread_cond_init#include <pthread.h> int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);cond: 条件变量的地址 attr: 属性变量,普通属性: NULL 返回值: 成功:

2022-03-28 13:07:07 781

原创 读写锁的使用规则

读写锁: 读锁(共享锁) —> 访问临界资源,可以一起读取数据 --> 读锁可以同时上,不会阻塞!写锁(互斥锁) —> 访问临界资源时,不要一起修改值 --> 写锁不能同时上锁,会阻塞!1. 初始化读写锁 – pthread_rwlock_init() -> man 3pthread_rwlock_init #include <pthread.h>int pthread_rwlock_init(pthread_rwlock_

2022-03-28 12:57:42 843

原创 互斥锁使用规则

互斥锁: 访问共享资源时,一般加入互斥锁与信号量相似却更为实用1. 初始化锁1.1 ) 动态初始化 —> 调用函数 pthread_mutex_init – man 3 pthread_mutex_init#include <pthread.h>int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);mutex: 未初始化锁变

2022-03-28 12:19:03 448

原创 有名信号量与无名信号量

有名信号量: 进程无名信号量: 一般:线程作用: 用于处理同步互斥一. 有名信号量1. 创建或者打开一个有名信号量 sem_open() — man 3 sem_open //初始化并打开一个有名信号量 sem_open - initialize and open a named semaphore#include <fcntl.h> /* For O_* constants /#include <sys/stat.h>

2022-03-28 12:09:14 1309

原创 线程取消处理函数的注册

功能:当线程意外被别的线程取消的时候,我们可以调用该处理函数去,执行线程最后的工作。NAMEpthread_cleanup_push, pthread_cleanup_pop - pushand pop thread cancellation clean-up handlersSYNOPSIS#include <pthread.h> void pthread_cleanup_push(void (*routine)(void *),

2022-03-25 21:50:55 285

原创 线程的相关函数:创建、属性、接合、退出类型......

一. 进程与线程关系进程: ./xxx --> 开启一个新的进程 进程是系统最小资源分配单位int main() { --> 进程开始 …return 0; --> 进程结束 }线程: 一个进程内部的资源,是系统中调度的基本单位,所有子线程都是共有资源二. 线程的函数接口 --> 封装在线程库 libpthread.so 头文件: pthread.h库的路径: /usr/lib/i386-linux-gnu/libpthread.so头文件的

2022-03-24 17:55:02 405 1

原创 信号量的使用规则

信号量信号量不是一种通信方式,只是一个处理互斥,一般用于共享内存互斥将信号量处理过程比作停车,有车位和停车场入口两个观测点,车位(空间)、车(数据)发送端:车辆先经过停车场入口,停车场会先显示车位-1(空间P操作 ),接下来车辆入库车辆+1(数据V操作)接收端:车辆离开停车场先离开车位,所以是车辆先离开车位车辆-1(数据P操作),经过停车场出口驶离停车场时,停车场会显示车位+1(空间V操作)1. 根据key值获取信号量ID – semget() — man 2 semget#in

2022-03-22 20:25:01 448

原创 共享内存介绍

共享内存1. 获取共享内存的ID号 — shmget() — man 2 shmget#include <sys/ipc.h>#include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg);key: 共享内存对应IPC对象的key值 size: PAGE_SIZE = 1024整数倍 4096 8192shmflg: IPC_CREAT|0666: 不存在则创建

2022-03-20 13:43:42 482

原创 消息队列的使用

消息队列管道: 不能读取特定,只要管道中有数据,就会全部读取 消息队列: 可以读取相对应的数据1. 根据key值申请消息队列ID号 --> msgget() --> man 2 msgget功能: msgget - get a message queue identifier //获取消息队列的ID号#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>

2022-03-20 13:33:54 425

原创 IPC对象

一.IPC对象:消息队列,共享内存,信号量 --> 每个IPC对象就像文件一样,有相应的标识符一一对应,不同IPC对象对应标识符不一样。二. 查看LinuxIPC对象的命令0)查看全部IPC对象: ipcs -a1) 查看消息队列: ipcs -q------ Message Queues -------- key msqid owner perms used-bytes messages2) 查看共享内存: ipcs -m--

2022-03-20 13:21:37 201

原创 验证进程中信号问题

1、验证进程在响应信号时,信号会相互嵌套。#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>void fun(int sig){

2022-03-20 13:08:14 129

原创 信号集的使用

信号集: 一堆信号的集合,如果想同时设置多个信号的属性,可以先把信号加入到信号集中,再设置信号集的属性。阻塞掩码: 一个属性,当把某些信号加入到信号集,如果设置了信号集为阻塞状态,那么在阻塞状态下,如果收到信号集中的信号,则暂时不会响应,直到阻塞状态消失了,才会响应!函数接口:关于信号集的接口:sigemptyset, sigfillset, sigaddset, sigdelset, sigismember - POSIX signal set operations. #include.

2022-03-20 13:01:01 374

原创 Linux中的信号发送与捕捉signal()/raise()/access()

一.信号1. 在Linux中,非常多信号,通过kill -l列出所有的信号//1 - 31号非实时信号 (Linux系统在响应这些信号时没有固定的次序) 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM1

2022-03-16 17:55:56 1236

原创 有名管道pipe/无名管道fifo

管道通信1. 无名管道pipe() --> man 2 pipe功能: create pipe#include <unistd.h>int pipe(int pipefd[2]); --> 数组作为形参,只是传递首元素的地址pipefd: 有两个int类型的数据的数组,用于存放文件描述符返回值: 成功:0 失败:-1注意:A. 无名管道没有名字,只是数组而已,不能使用lseek来文件定位B. 无名管道只能作用于亲缘关系的进程(父子,兄弟,祖

2022-03-16 16:56:03 122

原创 进程的概念与exec的用法

一.进程概念1.进程与程序的差异?未编译的程序 ----------可执行程序程序: 一堆待执行的程序 gcc hello.c -o hello (程序是一个静态数据) 剧本进程: 只有程序被加载到CPU中占用资源时,根据代码每行做出反应,才能形成一个真正动态的进程(进程是一个动态的过程) 拍戏的过程2.可执行程序 project --> ./project --> 开启一个进程以下的几个区域的数据会直接从程序中拷贝到内存中

2022-03-09 16:39:43 979

原创 LCD的双缓冲显示原理及示例

概念系统层专门提供这个函数给应用层开发人员,控制,获取所有Linux平台下的硬件的功能和信息。 控制设置:写入数据,控制硬件 put,set 获取信息:读取数据,获取硬件信息getioctl: 设置和获取,都是需要具体的命令(宏定义) 简单例子: 获取LCD 的简单参数,譬如显存大小,LCD的w和h; man 2 ioctl#include <sys/ioctl.h> int ioctl(int fd, unsigned long request

2021-09-05 11:06:48 1388

原创 目录IO——目录检索概念及应用

概念Linux平台下(可视化的操作系统:虚拟的文件系统(本质) = 文件 + 目录<文件夹>),其实只有文件。 其实文件是多种类型的:文件夹是文件中的一种类型而已。文件夹也是文件。疑问: Linux系统里面有多少种文件类型: 普通文件链接文件:软链接(快捷方式),硬链接(副本 – -复制出来) 设备文件:块设备,字符设备,驱动 …目录IO用到的函数① opendir — 打开一个目录② readdir — 读取一个目录 (目录里面有文件也有目录,可能什么都

2021-09-05 10:46:14 1145

原创 标准IO和系统IO

标准IO:对数据的IO是有缓存机制。在处理大数据的时候,才会体现提高IO操作效率。文本中的数据,数据库中数据。系统IO:对数据的IO没有缓存机制,针对的是需要及时获取(需要具有较高的实时性)数据,一般指硬件设备产生的 数据(要获取的数据),专门操作设备文件:譬如:触摸屏获取坐标疑问:为什么有缓存操作,就针对大数据处理?为什么没有缓存操作就指针及时获取(需要具有较高的实时性)的数据处理?补充缓存机制:全缓存:当缓存区满的时候,才进行IO操作 fwrite fread .

2021-09-05 09:11:17 394

原创 解决bmp图片文件宽度不是4的倍数

宽度是不是4的倍数的问题:例子:图片分辨率 110 100宽度为《字节数》:1103判断宽度是不是4的倍数, 如果不是: 图片的大小就不只是:分辨率*3+54 应该是:分辨率*3+54 + (w*3%4)*100(确定read的第三个参数,和数组的长度) 确定图片的总大小之后,要全部(像素点+补的字节数)读取出来(除前54个字节之外) 如果是: 按照旧代码if(w*3%4 != 0){ //修复 补数 = 4-(w*3%4);}else{ 正常显示}

2021-09-04 11:30:19 1278 1

原创 mmap 内存映射的基本使用用方法

mmap作用:提前申请一块内存空间,将文件映射进内存(显存)内。内存:内存就是内存(运行内存 = 内存条 + 显卡)映射: 两个集合之间的元素具有一一对应的关系 集合A:显卡内存 内存的元素 (像素点 --- 地址)同化集合B:fb0文件 文件的元素 (像素点 --- 地址)**头文件:#include <sys/mman.h>** void *mmap(void *addr, size_t length, int prot, int flags,int fd, off

2021-09-04 11:08:50 352

原创 const和volatile的基本用法

volatile作用:用来修饰变量的,使变量不会被编译器优化,一般应用再多线程复杂环境中对于共同使用的变量来说,数据是多变的,如果不加上volatile修饰变量,那么使用这个变量的时候是通过寄存器中获取的,从而导致数据不准确什么叫不被编译器优化:直接在内存区备份之前的数据值,下次使用变量的时候直接从备份区获取数据//例子: int main() { int a = 10;//公共元素 --- 新闻(时效性) int bf = a;//备份区 /* 多线程环境下 ---- 很多人

2021-09-04 10:45:19 319

原创 动态库(-fPIC)和静态库的制作

库的介绍静态库和动态库都是ELF格式的文件,通过编译得来的普通程序是被./运行库是被执行但是不能被运行不能./也没有main函数执行:可以中途来回加载到内存库是用来存放有价值的函数接口静态库:.a特点:调用函数库的程序源码要和库文件一起编译,导致程序文件偏大,平台转移的时候直接烧写即可制作方式:第一步:使用gcc生成.o文件gcc -c goal.c -o goal.o第二步:使用ar编译器生成.a静态库ar -cr -o face.a face.o-o:目标文件c:创建一个空的

2021-08-28 14:15:54 1356

原创 Makefile的基础用法

Makefile的基础用法成员:1、wildcard:用来检索当前路径下的.c文件2、patsubst:替换,用捕获的.c文件获取到.o文件3、echo:输出命令4、变量:来保存数据,没有类型之分例子SRCS=$(wildcard *.c) //捕获到当前目录下所有.c文件给予变量SRCSOBJS=$(patsubst %.c,%.o,$(SRCS)) //将捕获的.c文件获取到.o文件CC=gcc //gcc的变量TARGET=book_p //

2021-08-27 22:33:11 97

原创 Linux的系统IO<文件IO>函数(read)(write)(lseek)

read函数参数fd:为文件打开成功的返回值参数buf:存放缓存区首地址,用来存储读到的数据,需要自己申请count:读取字节数(无符号长整型)返回值:读取的字节数/-1示例: char save_read[100]; memset(save_read,0,100);//要给够足够的存储空间 int open_ret = open("./目标文件路径",O_RDONLY) int read_ret = read(open_ret, save_read_data, 100); if(re

2021-08-08 12:46:25 145

原创 Linux的系统IO<文件IO>函数(open)(close)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-08 12:01:53 94

空空如也

空空如也

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

TA关注的人

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