自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux--线程的认识(一)

对线程的基本介绍和基本使用方式

2024-05-22 22:25:34 947 33

原创 Linux--信号

信号是用于进程间通信和进程控制的一种机制。。

2024-05-01 23:20:56 1251 41

原创 C++进阶--智能指针

。C++标准库提供了多种常见的智能指针,目前常用的有:unique_ptr , shared_ptr , weak_ptr。(头文件: < memory >

2024-04-27 10:00:00 951 27

原创 C++进阶--异常

condition这些方式在实际应用中对代码的可读性和可维护性是非常低的,尤其在大型项目中。

2024-04-24 09:00:00 892 8

原创 Linux--进程间的通信-共享内存

如果ftok函数返回失败时,我们就需要不断的尝试,对路径名和id值进行修改,直至成功。Comm.hpp:包含共享内存的创建,销毁,挂接进程等。fifo.hpp:利用管道来实现对共享内存实现同步机制。

2024-04-21 18:00:00 1234 23

原创 Linux--进程间的通信-命名管道

并且命名管道开辟的管道本质是一个文件,相对于匿名管道,管道空间比较大;所在位置不同:匿名管道会在内存中创建,而命名管道会在文件系统中创建;mkfifo是用于创建命名管道的命令,它的作用是在文件系统中创建一个特殊类型的文件,该文件可被多个进程用于进程间的通信。PipeServer.cc: 服务端(读端),需要对管道创建一个对象,读取管道中的内容。Comm.hpp: 这里面包含了一个有关命名管道的类,包括管道的创建和销毁。PipeCilent.cc: 这是客户端(写端),将数据写入到命名管道文件;

2024-04-18 09:00:00 614 23

原创 Linux--进程间的通信--进程池

这里面包含了进程池(创建资源进程、发送任务码、回收资源进程、资源进程的管理)、进程池的控制(进程通道的选择、任务的选择、任务的选择)、进程间的通道(包含父进程的文件标识符、子进程的进程ID、通道的名称)以及主函数;通过主程序的创建,当做管理进程;然后再创建几个子进程作为资源进程,在主函数模拟n个任务来临时,轮盘调用可用的资源进程。:这是一个任务头文件,包含了有关任务的模拟,任务的处理,任务的派发的任务有关函数。当有新的任务提交时,管理进程会从进程池中取出一个资源进程,将任务分发给它来处理。

2024-04-16 00:02:37 918 25

原创 Linux--进程间的通信-匿名管道

,它是一种的通信方式,通过管道,可以实现两个不同进程之间的通信,使用时,只能一方写入,另一方读出。:消息队列可以在没有任何关系的进程之间传递数据,它提供了一个消息的队列,发送方将消息放入队列,接收方从队列中获取消息。这种通信方式。。共享内存通信方式。:信号量是一种计数器,用于进程间的同步和互斥操作。它可以用来保护临界区资源,控制并发访问和协调进程间的操作顺序。:套接字是一种中常用的通信方式,它可以在不同主机之间进行进程间通信。套接字通信方式适用于分布式系统或者网络环境下的进程间通信。

2024-04-10 21:24:20 1145 34

原创 C++进阶--C++11(2)

C++11是C++编程语言的一个版本,于2011年发布。C++11引入了许多新特性,为C++语言提供了更强大和更现代化的编程能力。

2024-04-06 09:00:00 811 26

原创 C++进阶--C++11(1)

C++11是C++编程语言的一个版本,于2011年发布。C++11引入了许多新特性,为C++语言提供了更强大和更现代化的编程能力。这篇文章将对C++11的一些新增特性进行讲解和实际应用场景。

2024-04-03 11:43:34 1238 28

原创 C++进阶--位图和布隆过滤器

位图和布隆过滤器是两种常用的数据结构,它们在计算机科学领域有着广泛的应用。本文将介绍这两种数据结构的基本原理和应用场景。

2024-03-29 10:00:00 867 32

原创 C++进阶--使用哈希表实现unordered_map和unordered_set的原理与实例

本文将介绍如何使用哈希表来实现C++ STL库中的unordered_map和unordered_set容器。我们将会解释哈希表的基本原理,并给出具体的代码示例,帮助读者更好地理解和应用哈希表。

2024-03-27 12:00:00 1145 31

原创 Linux--动静态库的原理和使用详解

本文介绍了Linux系统中动态库与静态库的概念、原理以及使用方法。通过深入讲解动态库与静态库的区别和优劣势,帮助读者更好地理解并选择合适的库类型来进行软件开发。

2024-03-25 11:11:39 845 28

原创 C++进阶--哈希

哈希(Hash)是一种常见的密码学技术和数据结构,。。唯一性固定长度高效性不可逆性。

2024-03-21 21:45:00 2275 31

原创 Linux--文件系统:数据的存储和组织之道

一个高效可靠的文件系统对于系统性能和数据安全至关重要。

2024-03-20 10:55:08 1250 31

原创 C++进阶--mep和set的模拟实现

在模拟实现set和map时,可以使用红黑树来按照元素的大小自动排序,并且保持插入和删除操作的高效性。红黑树是一种自平衡的搜索二叉树,通过对节点进行颜色标记来保持平衡。

2024-03-14 10:15:32 565 35

原创 C++进阶--红黑树

红黑树,是一种自平衡的二叉搜索树,它具有以下特点:

2024-03-13 20:32:04 493 25

原创 C++进阶--AVL树

int _bf;

2024-03-06 21:28:49 970 41

原创 Linux--文件(2)-重定向和文件缓冲

常见的1.““符号:将命令的标准输出重定向到指定文件中,并覆盖原有的内容。2.”>>“符号:将命令的标准输出重定向的指定文件中,并将输出结果追加到文件末尾。3.”“符号:将指定文件的内容作为命令的标准输入。4."<<"符号:将命令的标准输入设置为指定的文本块。。

2024-03-04 22:50:00 1026 42

原创 C++进阶-- map和set

set是C++标准库中的一种关联式容器,它用于存储一组有序的、唯一的元素。set中的元素按照键值进行自动排序,并且不允许存在重复的元素。set在底层是由二叉搜索树(红黑树)实现的。set中只放value,但在底层实际存放的是由<vlaue,value> 构成的键值对。log_2 nmap是C++标准库中的一种关联式容器,它用于存储一组键值对。每个元素都由一个唯一的键和对应的值组成。map中的元素按照键进行自动排序,并且不允许存在重复键。在map内部,

2024-03-02 17:12:18 709 22

原创 Linux--自定义shell

102464// 输出提示符并获取用户输入的命令字符串"ls -a -l"//'\0'int i = 0;// 让子进程执行命名exit(1);// 1. 检测是否是内建命令, 是 1, 否 0// 2. 执行ret = 1;if(!ret = 1;ret = 1;

2024-02-23 21:41:10 750 30

原创 Linux--文件

。文件通常以特定的格式和拓展名来表示其内容和类型。在计算机系统中,文件使用文件名来唯一标识和访问。文件可以被创建、读取、写入、复制、移动、删除等操作。文件还可以按照目录结构进行组织,形成文件夹或目录。

2024-02-06 23:47:52 1260 25

原创 C++进阶--搜索二叉树

搜索二叉树是一种特殊的二叉树,其具有以下特点:1.。2.。这个 特性使得。通过利用节点之间的大小关系,我们可以快速定位到目标值所在的位置,避免不必要的比较操作。下面直接讲解对搜索二叉树的实现。

2024-02-05 11:28:04 676 14

原创 C++进阶--多态

具体的来说,。对于多态的实现,需要一定的条件。

2024-02-02 11:34:04 635 35

原创 C++进阶--继承

Teacher t;s.Print();t.Print();return 0;

2024-01-30 23:33:17 1180 24

原创 C++初阶--queue和stack

stack是一种容器适配器,按照后进先出的原则存储数据。通过头文件进行提供;stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作pop_back:尾部删除元素操作。

2024-01-27 13:00:10 779 10

原创 C++初阶--list

C++的list是标准模板库中的一个容器,用于存储和管理元素的双向链表。提供了一系列访问和修改数据的函数;使用时需要包含头文件下面演示下它的一些基础功能。

2024-01-26 20:40:28 464 14

原创 C++初阶--自我实现vector

首先我们看vector的成员函数,都是通过迭代器来确定具体位置的,_start表示vector的起始位置,_finish表示vector有效存储的结束位置,_endodstorage表示当前开辟的空间指向最后的地址位置下面通过实例来讲解一些需要注意的地方。

2024-01-20 11:18:36 821 19

原创 Linux--进程控制

进程终止是指一个正在运行的进程结束其执行并释放占用的系统资源的过程。进程可以通过以下几种方式终止:在进程终止时,操作系统会回收已分配给该进程的内存空间、文件描述符、打开的文件等资源,并将进程的退出状态返回给父进程。exit()和_exit()都是用于正常终止进程的函数进程等待指的是一个进程暂停其执行,直到满足某个条件或事件发生后才会继续执行。在操作系统中,进程可以通过等待来同步和协调与其他进程的操作。在Linux中,wait()是一个系统调用,是父进程在等待子进程执行完毕之前挂起自身,并等待子进程

2024-01-18 14:16:29 1204 20

原创 Linux--程序地址空间

它包括了程序的代码、数据和堆栈每个部分。在32位平台下,程序地址空间的大小为2^32,即4GB。这将是程序可以访问的最大内存范围。程序地址空间通常被划分为不同的段:程序地址空间的具体分布方式会因为操作系统和编译器的不同而有所差异。然而,不管具体分布方式如何,所有程序都必须在程序地址空间中找到自己的位置来执行和存储数据。。

2024-01-18 11:27:52 537 4

原创 Linux--环境变量

它们是在操作系统中具有特定名称的对象,包含了一个或多个应用程序所需的信息。,例如临时文件夹位置、系统文件夹位置、可执行文件路径等。应用程序可以通过读取环境变量来获取这些配置信息,并根据其值来调整自身的行为。常见的环境变量包括:PATH: 指定可执行文件的搜索路径HOME: 指定用户的主目录路径LANG: 指定语言环境在操作系统中,可以通过设置、修改和删除环境变量,以适应不同的需求和配置。例如,像我们的main函数,实际上当我们给出指令时,实际上就是给主函数传参;传参之后,。

2024-01-16 13:25:49 874 19

原创 Linux--进程状态与优先级

进程可以看作是程序的一次执行实体,它包含了程序代码、数据以及相关的执行上下文信息。操作系统通过创建、调度和管理多个进程来实现对计算机系统资源的有效利用。每个进程都有自己的地址空间、寄存器集合、堆栈等资源,他们与其他进程相互隔离。不同的进程之间可以通过进程间的通信(PIC)机制进行信息交换和数据共享。简单的来说,。

2024-01-15 13:30:20 1240 22

原创 Linux--系统结构与操作系统

它是CPU能够直接访问和存储的空间,数据可以快速的读取和写入。它创建和销毁进程,分配和释放进程所需的资源,以及调度和协调进程之间的执行顺序,确保它们正常运行且不发生冲突。不同的程序可以被加载到内存的不同位置,并且可以在其中相互切换,从而实现并发执行的能力。而对于存储单元来说,也有自己的等级梯度(寄存器、三级缓存、主存储器、辅助存储器),一般来说,运行效率越高,价格越贵,单体容量越小,反之;而在操作系统中,被管理者硬件部分实际上就是先描述你的具体信息,然后才有对应的驱动,管理者系统才能对硬件进行组织管理。

2023-12-01 00:05:04 2878 12

原创 C++初阶--String类的使用

String

2023-11-28 22:04:07 1479 22

原创 C++初阶--类型模板

编译器会查找匹配的模板定义,并将实际的参数类型替换为函数参数类型,生成对应的函数代码。通过函数模板,可以编写一种通用的函数,可以适用于多种类型的数据,可以在不同的上下文中进行重复使用。在上述格式中,template < typrname T > 表示定义了一个模板,T是一个占位符类型,它可以代表任何类型。,如果我们让别人直接调用我们的函数,只使用整形类型的Swap(),那么其他函数就有点浪费了;泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。这是一些对于Swap重载的函数,区别是类型不同;

2023-11-21 21:17:16 584 34

原创 C++初阶--内存管理

定位new是一种特殊的用法,用于在指定的内存位置上创建对象。通常情况下,使用new关键字会在堆内存中动态分配一块适当的空间大小,并在该内存上构造一个对象。在C语言中,我们是用malloc和free来进行动态内存管理的,而在C++中,我们习惯使用new/delete来进行动态内存管理。堆上的内存生命周期由程序员来负责控制,需要手动释放以避免内存泄漏。栈的特点是后进先出,它的生命周期与函数的调用关系密切联系。:堆是由程序员手动管理的动态内存区域,用于存储。:栈是由编译器自动管理的内存区域,用于存储。

2023-11-16 21:11:07 724 38

原创 Linux--gdb的使用

Debug版本:该版本用于调试和开发阶段的版本。编译时通常会禁用大部分的优化选项,以便在调试过程中更好的观察和理解代码。编译时通常会选择较高的优化级别,此外,该版本还会进行链接优化,移除未使用的代码和数据,减少可执行文件的大小。在编译时,通常会禁用调试符号的生成,以减少文件大小和保护源代码。一般来说,系统会默认安装,如果没有,就按上面指令进行安装,如果是普通用户,需要在前面加上sudo;4.使用gdb提供的命令和快捷键来进行单步执行、查看变量、检查调用栈等操作,以便找出程序中的错误。

2023-11-14 21:33:08 391 28

原创 C++初阶--类与对象(3)(图解)

它们被声明为静态成员后,在内存中只有一个副本存在,并且在任何实例化对象之前就已经存在了。静态类成员必须在类的外部进行初始化定义。通过初始化列表,可以在对象被创建时就将成员变量初始化为指定的值,而不是在构造函数体内逐个赋值。在我们之前的构造函数中,编译器会通过构造函数,对对象中各个成员给出一个适合的初始值,定义一个对象并初始化为(2023,10,23);每个成员变量的初始化由成员变量名后跟一个。这是一个修饰符,用于修饰类的构造函数。内部类是一个类的内部定义的另一个类。在初始化列表中,成员变量按照。

2023-11-11 22:49:29 507 46

原创 Linux--gcc与make

常用于清理临时文件、安装和卸载文件的目标文件上。

2023-11-09 12:57:27 158 10

原创 Linux--vim

对vim指令模式的基本操作和自动配置

2023-11-08 01:27:50 779 14

空空如也

空空如也

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

TA关注的人

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