自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [linux]IO多路复用机制:select、poll、epoll

​首先我要向大家输出一个IO的概念:IO在我看来就是 等 + 拷贝(简化IO模型),等就是等待系统资源(设备。数据等)就绪(比如等待文件描述符就绪,等待数据就绪),拷贝就是拷贝数据资源(比如将你写的把内容将它从写缓冲区拷贝到读缓冲区,让用户可以正常读取)。如果想要IO速度快,减少等待时间是提高IO性能的关键。等待时间通常包括等待硬件资源(如磁盘、网络)就绪的时间以及等待操作系统调度的时间。在IO密集型应用中,多个IO操作可能同时进行。减少每个操作的等待时间可以显著提高整体吞吐量,因为更多的操作可以在相同的

2024-07-13 21:51:32 925

原创 [Linux]详细的Makefile使用教程(每一步都有例子)

一、Makefile的基本结构二、Makefile的工作原理三、Makefile的常用命令和选项:make命令,make clean,make -f file,make -C dir,make -n,make -s 四、Makefile中的变量:$(变量名) $@,$

2024-07-12 15:13:51 11305 4

原创 [Linux]fcntle将一个文件描述符从阻塞状态改为非阻塞状态

fcntl复制文件描述符F_DUPFD命令可以复制一个现有的文件描述符,并返回一个新的文件描述符。这个新文件描述符与原始文件描述符在底层引用的是同一个文件表项,即它们指向同一个打开的文件。获取/设置文件描述符标记:通过F_GETFD和F_SETFD命令,可以获取或设置与文件描述符相关联的特定标记,如FD_CLOEXEC(表示在exec调用时是否关闭该文件描述符)。获取/设置文件状态标记:通过F_GETFL和F_SETFL命令,可以获取或设置文件描述符的状态标记,如O_NONBLOCK(非阻塞模式)、

2024-07-12 11:37:00 501

原创 [Linux]五种IO模型(图文讲解+故事讲解)

五种IO模型:1.阻塞IO:在内核将数据准备好之前,系统调用将会一直等待,所有的套接字, 默认都是阻塞方式.阻塞IO是最常见的IO模型。2.非阻塞IO:也称为非阻塞轮询式IO,如果内核未将数据准备好,系统调用不会等待阻塞,会直接返回,且返回的是EWOULDBLOCK错误码。注意:使用非阻塞IO,一般要进行轮询操作,即反复的进行IO操作(如读写文件等操作,看看文件描述符是否已经就绪)直到操作完成,这对CPU是一个很大的消耗,一般只有特定的场景才使用。3.信号驱动IO:内核将数据准备好之后,发送SIGIO信号通

2024-07-11 13:54:28 1134 1

原创 [linux网络编程]UDP协议和TCP协议的使用

意思就是启动服务器,端口号为8888,这里在服务端我们没有设置ip, 只要端口号正确,任意IP都能和我们的服务器连接。这样做是为了确保结构体的所有未明确赋值的字段都被初始化为0,防止未初始化的内存导致的问题。这是为了确保结构体中的所有字段都被正确地初始化为默认值,避免使用未初始化的内存。函数用于将端口号从主机字节序转换为网络字节序(大端字节序),因为网络通信中通常使用网络字节序。结构体的所有字节设置为0,确保结构体的所有未明确赋值的字段都被初始化为0。函数用于将主机字节序的端口号转换为网络字节序。

2024-04-27 23:34:06 1105

原创 [网络编程]socket嵌套字的一些常用接口

一、socket常用接口1.sockaddr_in2.socket3.bind4.listen5.accept6.connect7.send8.sendto9.recv10.recvfrom11.close二、 字节序之间的转换函数1. inet_ntoa 2. inet_aton 3.inet_addr 4.inet

2024-04-23 18:34:27 1108

原创 [C++]深入解析:如何计算C++类或结构体的大小

内存对齐是指将数据存储在内存中时,按照一定的规则让数据排列在规定的地址上,以提高数据访问的效率和速度。在C++中,结构体(类)内部的每一个成员变量都需要存储到内存中,因此需要进行内存对齐以保证内存的访问效率。1.第一个成员从在与对象偏移量为0的地址处开始存放。int i;第一个成员变量存放位置如图:2.其他成员变量要对齐到对齐数的整数倍的地址处。

2024-03-27 23:49:00 508

原创 [C++]内联函数(内联函数的概念,内联函数的特性,内联函数与宏的区别)

C++编译器会在调用内联函数的位置将内联函数展开,内联函数没有调用函数参数压栈的开销,内联函数可以提高程序的运行效率。首先给一个宏函数的列子供大家回忆回忆宏函数的写法。以inline修饰的的函数叫内联函数,

2024-03-26 23:50:31 766

原创 [C++]函数重载(什么是函数重载,函数重载的原理(底层怎么实现))

函数重载是指在同一作用域内,可以有多个功能类似具有相同函数名,不同参数列表(包括参数类型、参数个数、参数顺序)的函数。编译器会根据函数调用时提供的参数来决定调用哪一个具体的函数。注意:只有返回值类型不同并不构成函数重载!原因:编译器对函数名字修饰时(下面会讲)修饰后的函数名不会包含函数的返回值类型。

2024-03-26 19:32:58 1040

原创 [C++]缺省参数(什么是缺省参数,怎么使用缺省参数,使用缺省参数时的注意事项)

在声明或者定义函数时为函数的参数指定一个默认值。在调用该函数时如果没有传递实参,则使用默认认值,否则使用指定的实参。

2024-03-25 14:45:52 554

原创 [C++]命名空间(命名空间的概念,命名空间的语法,是否要展开命名空间)

命名空间就是一个新定义的作用域,里面可以存放自定义类,变量,函数等,主要用来防止命名冲突。

2024-03-25 13:56:17 481

原创 [Linux]条件变量:实现线程同步(什么是条件变量、为什么需要条件变量,怎么使用条件变量(接口)、例子,代码演示(生产者消费者模型))

在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。饥饿问题饥饿问题指的是某些线程由于某种原因无法获得它们所需要的资源或执行机会,导致它们长时间得不到处理,甚至永远得不到处理的现象。这种情况通常发生在多个线程竞争有限资源时,其中一些线程可能因为优先级过低、调度算法的不公平性、同步机制使用不当或其他原因而无法获得足够的执行时间。

2024-03-21 23:46:37 6662 17

原创 [Linux]互斥锁(什么是锁,为什么需要锁,怎么使用锁(接口),什么是死锁,怎么避免死,锁演示代码)

什么是锁?锁是一种同步机制,用于控制多个线程对共享资源的访问。通过锁,可以确保一次只有一个线程能够访问特定的代码段或数据,从而防止数据竞争和不一致。锁的主要目的是确保数据的一致性和线程安全性。为什么需要锁?需要锁的主要原因在于确保多线程或多用户环境中共享资源访问的原子性和数据一致性。在多线程应用中,若多个线程同时访问并修改同一资源,可能导致数据冲突、不一致甚至损坏。

2024-03-18 17:09:32 1877 2

原创 [Linux]多线程(在Linux中的轻量级进程(LWP),怎么使用线程(接口))

在Linux系统中没有线程的概念,只有轻量级进程(LWP)的概念,OS不会提供线程的接口,只提供轻量级进程的接口,那么我们怎么在Linux创建线程呢?原来Linux系统中提供了一个第三方库:pthread原生动态库,OS通过pthread原生动态库就可以创建线程。如图:编译链接、时应该链接pthread原生线程库(动态库)不会连接动态库的可以看我这篇文章。

2024-03-17 20:41:59 1253

原创 [linux]进程信号(信号的概念,信号的产生方式,信号的相关接口、指令,函数,信号怎么保存(原理),信号怎么处理)

信号是进程之间事件异步通知的一种方式,属于软中断。每个信号只有一个bit的未决标志,非0即1,不记录该信号产生了多少次,阻塞标志也是这样表示的。因此,未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。

2024-02-27 20:11:20 833 1

原创 [linux]进程间通信(IPC)———共享内存(shm)(什么是共享内存,共享内存的原理图,共享内存的接口,使用演示)

共享内存区是的(进程间通信)IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。:共享内存没有进行同步与互斥!共享内存不会自动销毁,要手动销毁。

2024-02-22 20:17:47 1874

原创 [linux]:匿名管道和命名管道(什么是管道,怎么创建管道(函数),匿名管道和命名管道的区别,代码例子)

我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。而匿名管道顾名思义,就是一种没有名字的“管道”。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件。

2024-02-07 21:27:41 1569

原创 [Linux]动静态库(什么是动静态库,怎么生成动静态库,怎么使用(连接)动静态库)

静态库本质就是将库中的源文件直接编译成.o目标二进制文件,然后打包。程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)

2024-01-30 23:11:07 1033

原创 [Linux]:软硬连接(什么是软硬链接,怎么创建软硬链接,以及对应的例子)

硬链接不是一个独立的文件,它是与源文件的indoe有着映射关系的新的文件名,硬链接与源文件共用同一个inode。删除任一方都不会影响另一方,当indoe的引用计数为零时,文件(inode对应的文件)销毁。软连接文件是一个独立的文件,有独立的inode,软连接的内容是指向源文件的路径,删除软连接不会影响源文件,但删除源文件则软连接将找不到源文件,类似于widows的快捷方式。与源文件test.cc建立软连接test.soft.link。与源文件test.cc建立硬连接test.hard.link。

2024-01-30 12:22:42 289

原创 【Linux】介绍:进程退出、进程等待、进程程序替换

一、进程退出:_exit函数 exit函数 _exit()与exit比较 return退出二、进程等待:wait方法 waitpid方法三、进程程序替换:替换函数 函数解释 命名理解 使用举例

2023-12-16 16:14:49 267

原创 C++11:lambda表达式(对各个参数详细说明+注意事项+使用案例+探究底层)

一、lambda表达式语法: 1.lambda表达式书写格式 2. lambda表达式各部分说明 3.捕获列表说明 二、lambda表达式的一些使用案列:1.借助auto将lambda表达式赋值给一个变量来直接调用。2.对于类似于sort对自定义类型排序等情况时使用lambda可简化代码 三、函数对象(仿函数)与lambda表达式(探究lambda的底层)

2023-12-07 20:32:40 4874

原创 【c++】leetcode150. 逆波兰表达式求值

【代码】【c++】leetcode150. 逆波兰表达式求值。

2023-09-20 11:22:34 199

原创 linux调试器---gdb的操作介绍

1.看代码 2.打断点 3.删断点 4.禁用与开启断点 5.查看断点信息 6.调试 7.调试 8.查看变量 9.运行至某行10.打印变量值11.从一断点直接运行带下一个断点处12.更改变量值13.执行到当前函数返回,然后挺下来等待命令14.退出gdb

2023-09-18 18:48:46 138

原创 【C++】简单理解:将整数(浮点数)转换为字符串(string),将字符串(string)转换为整数(浮点数)方法

例子:将字符串“12”和“12.34”转换为整型和浮点型。用stringstream类,口诀:过滤一下就转化。例子:将整数12和浮点数12.34转化为字符串。头文件#include将字符串转换为整数(浮点数)

2023-09-11 18:12:43 691

原创 【Linux】vim的使用:命令模式、底行模式、插入模式、视图模式、替换模式的常用操作介绍

二、在命令模式中一些常用的操作 1.移动光标 2.删除文字 3.复制 4.替换 5.撤销上一次操作 6.更改 7.跳至指定的行 三:在底行模式中一些常用的操作 1.列出行号 2.跳到文件中的某一行 3.查找字符 4.分屏 5.保存文件 6.替换 7.离开vim 四、视图模式 1.写注释 2.去注释五、替换模式

2023-09-09 20:42:49 6590

原创 【C语言】快速排序(三种方法实现)+ 三数选其中(优化快排) + 与其他排序的排序速度比较

swap函数 三数选其中 法1:挖坑法 法2:前后指针法 法3:左右指针法与其他排序的排序速度比较(快排时间复杂度为O(N))

2023-08-16 17:55:17 212

原创 【c++】模拟实现list(包含模拟实现适合list的迭代器)

一.list的节点类 二.list的迭代器类 三.list类

2023-08-16 17:29:54 62

原创 【C++】模拟实现vector(参照底层代码模拟实现)

须知:typedef 私有成员 模板声明 1.构造函数 拷贝构造函数 2.析构函数 3.赋值重载 = 4.size capacity 5.reserve 6.resize 7.下标运算符 [ ] 8.push_back pop_back 9.swap 10.insert 11.erase 12.完整代码 + 测试代码

2023-08-14 20:08:58 109

原创 模拟实现string类

须知:私有成员 typedef 1.构造函数 2.拷贝构造函数 3.析构函数 4.赋值运算符 = 5.begin() 和 end() 6.流插入 > 7.push_back 8. += 9.append 10.clear11.c_strsizecapacity 12.empty 13.resize 14.reserve(扩容) 15.下标运算符[] 16. < = >= != 17.find 18.insert 19.erase 20.整体代码 + 测试

2023-08-11 19:44:31 76

原创 解leetcode题:17. 电话号码的字母组合(递归实现)

解leetcode题:17. 电话号码的字母组合(递归实现)

2023-08-11 16:29:36 53

原创 C++初阶笔记5---对函数模板与类模板的介绍

一. 函数模板 二.类模板

2023-08-05 09:57:09 74

原创 C++初阶笔记4---内容:1.内存分布2.operator new与operator delete函数3.new和delete的实现原理4.malloc/free和new/delete

一.内存分布 二.operator new与operator delete函数 三.new和delete的实现原理 四.malloc/free和new/delete的区别

2023-08-04 11:59:43 74

原创 C++初阶笔记3---对初始化列表、explicit关键字、static成员、友元 、内部类、匿名对象的讲解介绍

一.初始化列表 二.explicit关键字 三.static成员 四.友元 五.内部类 六.匿名对象

2023-08-04 10:31:52 64

原创 C++初阶笔记2---类和对象

一.构造函数 二.析构函数 三.拷贝构造函数 四.运算符重载

2023-07-30 19:25:02 68

原创 C++初阶笔记1---内容:1.预处理、编译、汇编、链接 2. C++关键字大全图(C++98) 3. 缺省 4. 函数重载 5. 引用 6. 内联函数7. 关键字:auto 8. 范围for

一. 预处理、编译、汇编、链接 二. C++关键字大全图(C++98) 三. 缺省 四. 函数重载 五. 引用 六. 内联函数 七. 关键字:auto 八. 范围for

2023-07-21 22:02:46 140

原创 leetcode题:69. x 的平方根

【代码】leetcode题:69. x 的平方根。

2023-06-29 14:34:32 97

原创 C语言实现通讯录(动态扩容、数据存储在文件)

头文件(Contact.h):头文件 函数声明 宏定义 结构体 源文件(Contact.c):函数功能的实现源文件(test.c):运行 测试

2023-06-28 14:21:46 350

原创 永久解决VS中使用scanf、strcpy、strcat等函数时报错问题

经过这一系列操作后,以后你只要创建源文件就会出现#define _CRT_SECURE_NO_WARNINGS 1在第一行,就可以使用VS认为的不安全函数了。

2023-06-25 23:49:19 2894 1

原创 leetcode二叉树题集(会更新)

1、另一棵树的子树2、对称二叉树3、相同的树4、单值二叉树5、平衡二叉树6、翻转二叉树7、二叉树的前序遍历8、二叉树的中序遍历9、二叉树的后序遍历10、二叉树遍历11、二叉树的所有路径(会更新)

2023-06-24 16:33:43 139

原创 实现二叉树

【代码】实现二叉树。

2023-06-24 15:51:27 106

空空如也

空空如也

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

TA关注的人

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