自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 Liunx进程信号

信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。

2024-04-05 22:21:35 605

原创 Linux 多线程与线程控制(程序均有详细注释)

死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态死锁四个必要条件互斥条件:一个资源每次只能被一个执行流使用请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不放。(即:保持着自己的锁,还要要对方的锁)不剥夺条件:一个执行流已获得的资源,在末使用完之前,不能强行剥夺循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系,即:两个线程各自占用一个锁后,还竞争对方的锁,叫环路等待解决死锁解决理念。

2024-04-04 22:49:22 777

原创 liunx 进程控制

在程序中,如果我们使用fork后,父进程会创建一个子进程,子进程可以通过if(x==0)进行分流,分流结束后,exit(0)退出。并且发生了神奇的现象,父子进程的同一个变量,有不同的数值。默认的行为是挂起调用进程,直到有子进程终止。在等待子进程终止的同时,如果还想做些有用的工作,这个选项会有用。用fork创建子进程后,子进程执行的是和父进程相同的程序(但有可能执行不同的代码分支),若想让子进程执行另一个程序,往往需要调用一种exec函数。注意:wait的等待是父进程的等待,并且一直等待直到子进程退出。

2024-03-19 14:08:51 969 1

原创 Liunx进程间通信

共享内存让不同进程看到同一份资源的方式就是,在物理内存当中申请一块内存空间,然后将这块内存空间分别与各个进程各自的页表之间建立映射,再在虚拟地址空间当中开辟空间并将虚拟地址填充到各自页表的对应位置,使得虚拟地址和物理地址之间建立起对应关系,至此这些进程便看到了同一份物理内存,这块物理内存就叫做共享内存。进程间通信通过共享资源来实现,这虽然解决了通信的问题,但是也引入了新的问题,那就是通信进程间共用的临界资源,若是不对临界资源进行保护,就可能产生各个进程从临界资源获取的数据不一致等问题。

2024-03-19 13:54:14 824 2

原创 Liunx文件系统和基础IO

open函数在上层为用户申请FILE结构体变量,并返回该结构体的地址(FILE*),在底层通过系统接口open打开对应的文件,得到文件描述符fd,并把fd填充到FILE结构体当中的_fileno变量中,至此便完成了文件的打开操作。一个扇区的大小为512字节,但是操作系统认为512字节太小了,访问效率太慢了,所以操作系统将连续的8个扇区作为一个基本数据块,即4KB, 所以这4KB就是IO的基本单位,也就是说只要需要修改数据,哪怕再小,操作系统也要将这4KB拿出来做修改再放回去,这就是所谓的基本单位。

2024-03-13 13:04:22 1090

原创 liunx 进程地址空间

当子进程刚刚被创建时,子进程和父进程的数据和代码是共享的,即父子进程的代码和数据通过页表映射到物理内存的同一块空间。例如,子进程需要将全局变量g_val改为200,那么此时就在内存的某处存储g_val的新值,并且改变子进程当中g_val的虚拟地址通过页表映射后得到的物理地址即可。子进程和父进程在页表中虽然有相同的虚拟地址,但是映射关系不一样,则子进程和父进程就可以映射不同的地址。再谈到进程控制块时, 现在我们知道了,进程地址空间,进程控制块都是结构体,通过指针关联了进程地址空间。命令行参数,以及环境变量。

2024-03-08 18:14:21 369

原创 liunx操作系统 环境变量

其实,在我们使用的基本命令,比如 ls -al 什么的都是用到这个接口。环境变量可以很好的帮助系统、用户、应用程序和脚本进行配置和运行。系统下的环境变量非常多,这里我们先认识下PATH、PWD、USER、HOME的功能。我们每次makefile执行完之后获得程序必须加上路径才可以运行,然而系统自带的程序不需要加上路径,这是因为系统提前为他们设定好了路径。这样会干掉我们所有的环境变量。我们只需要重启就好了。这样就加入了我们自己的环境变量。如果我们的变量也被进来了 ,那么我们的命令也就不需要加路径了。

2024-03-07 22:30:06 700

原创 C++ 之AVL树

我们看出 parent 和subr在旋转后,parent和subr都获得了平衡,他们的平衡因子都是0。所以我们在旋转之后 parent,subr都获得了平衡。平衡之后,只有原来的parent 是1 其他都是0.上图为第一种情况, 插入之后,bf为-1.调节之后达到平衡。左单旋是将父亲结点的右子树当新的父亲。我们看上图就能得出 这就是左单旋,左单旋就是把左边压下去,这样左右就一样高了。左单旋是单旋的父亲的左子树,右单旋是对整个树进行单旋。AVL的双旋的另一种 右左双旋。选择之后,调节后的平衡因子就很重要。

2024-03-06 21:58:04 370

原创 liunx自动构建化工具make/makefile

依赖方法:依赖方法是文件之间相互作用的方法。依赖关系:依赖关系是文件之间的关系。

2024-03-06 19:51:06 331

原创 c++高阶数据结构 二叉搜索树的实现

二叉树的构造函数很简单,对一般二叉排序树。析构函数需要重点说析构函数,析构的时候需要销毁所有的结点。二叉排序树的插入就是和二叉排序树的查找一致。二叉排序树插入时,大了就去右树,小了就去左树。二叉树的拷贝构造是需要通过递归,也就是前序遍历。每递归一次,进入一颗子树。恰好引用的就是当前的头结点。删除的第一步是查找的删除的位置cur. 我们和插入一样的做法。最后 拷贝构造的经典问题,传引用 不能传指针。销毁的时候需要后序遍历销毁所有结点。后序遍历才可以,否则删除不干净。大于则去左侧,小于则去右侧。

2024-03-03 12:33:39 366

原创 liunx操作系统 进程的基本概念

在没有存储器之前,所有的信息都是直接进入CPU,这样效率很差,因为读入,写出的速度远远慢于cpu计算的速度。在操作系统的管理下,操作系统用结构体描述结构体的,该结构体描述了设备的重要特性,通过管理特性数据管理你,比如设置你关机,你就关机。神奇的是 test并不是r状态,而是s状态,s状态是浅度睡眠,浅度睡眠是可以打断的睡眠。当5次循环结束后,子进程结束,子进程并不会直接被干掉,而是变为僵尸进程,僵尸进程是等待父进程接受退出数据用的。进程的概念:进程是操作系统最重要的概念,他在书上都是说他是运行起来的程序。

2024-02-28 21:57:08 924

原创 liunx gcc编译器 以及编译过程

就像hello.c中使用到了C标准库的东西“printf”,但是编译过程只是将源文件翻译成二进制文件而已,这个二进制文件还不能直接执行,还需要一个动作:将翻译成的二进制文件与需要用到的库绑定在一块。gcc -c hello.c -o a.o 是将源文件翻译成二进制文件,类Unix系统编译的结果生成.o文件,Windows系统生成的是.obj文件。(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些。由于a.o是机器码,不能以纯文本的形式打开(vim打开是乱码的)。

2024-02-24 19:58:31 371

原创 C++容器map和set使用

pair就是存放两个不同数据类型的结构体。pair就是一个模板map的[ ]可以说专为计数而生。模拟实现这个[ ]就是返回对应的value就可以了。

2024-02-23 20:33:36 359

原创 liunx文件权限和内核

在liunx中内核可以想象成一堆软件。由于内核过于复杂,我们并不想直接操作内核。因为内核1. 内核过于复杂,操作困难。2.内核也不想都去直接操作,导致各种问题。就像开车,我并不关心,方向盘怎么操作变向的,我只需要知道转向大方向。此时shell应运而生,shell就是方向盘,内核就是车前轮。我们想转弯只需要转方向,并需要关心车轮怎么变的。liunx操作系统中,又两种用户,普通用户和root用户。t就是粘滞位 粘滞位限制该文件内的所有文件,只有拥有者和root可以删除,其他人不能删除。liunx内核模拟图。

2024-02-23 16:27:47 343

原创 Liunx基础指令 二

管道是链接两个进程的工具,前一个进程的结果是后一个进程变量。相当于 fun2(fun1)的关系。find 作用为查找文件位置 ,必须是在指定目录下查找。date ——显示当前自己机器的时间。grep是在指定文件中查找关键字的工具。后面会重点学,我们举个简单的例子。sort命令就是按照阿斯科码排序。我们要拿到 第五,第六行的方法。uniq 是不显示重复行用的。

2024-02-22 12:51:48 354

原创 Liunx基础指令 一

注:文件系统中的inode: 在文件系统中,特别是类Unix文件系统,每个文件和目录都有一个唯一的inode号。通过inode,文件系统可以快速定位和管理文件的元数据(例如权限、所有者、修改时间等),而无需查找文件名。如 ls -al a:显示隐藏文件 l: 显示详细信息。但是 此时的重定向删除了我们的原来的内容,这时我们应该使用追加重定向 >>touch命令是修改文件的命令 包括修改时间 创建文件。ls -d ls是只显示目录,不显示目录文件。ls -ld 就是ls -l±d 同时命令。

2024-02-21 21:59:24 293

原创 60天干翻C++————时间类的实现

【代码】60天干翻C++————时间类的实现。

2024-01-17 13:47:30 319

原创 60天干翻C++———— C++ 类和对象

C++类和对象 类和对象的引入二级目录三级目录类和对象的引入在c语言中,“数据”和“处理数据的函数“是分开声明的,也就是说c语言本身不支持”数据和函数“之间的关联性。也就是说数据处理方法和数据是分离的,举个例子 我们要打印一个学生的成绩但是在C++中,student有可能采用独立的“抽象数据模型”二级目录三级目录...

2024-01-17 12:30:14 859

原创 60天零基础干翻C++————初识C++

在c语言中会有下面问题上述代码中,全局变量rand 可能会命名冲突,如下图此时编译失败,全局变量rand和stdlib.h发生命名冲突。与系统库冲突与其他人冲突这就是c语言的一个不足,所以在c++中引入了命名空间。引入命名空间后又出现了新的问题:输出结果不是0,似乎是个随机数。但是他并不是随机数,他是库中函数rand的打印,那么怎么才能打印命名空间域中的rand呢?就需要使用命名空间限定符使用了命名空间作用符elk::rand,就可以访问命名空间内部。

2024-01-06 21:24:06 525

原创 从零开始C++系列 c++ 入门

C++ 类与对象C++ 入门C++关键字C++特性缺省参数函数重载三级目录C++ 入门C++关键字c++是包容c的,也包容c的所有关键字,c有32个关键字,c++有63个关键字,下面分类列出。关键字功能与特性,我们会在后面详细解读C++特性命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题

2021-08-11 17:07:36 725 18

原创 C语言 二叉树与堆

神奇的树引言---树的故事ASDF三级目录引言—树的故事在自然界中有很多树 它们是这样的但是在我们的眼中 他是这样的显而易见 树的特点就是一对多 ,我们利用这个一对多的特点,可以让我们更好的解决编程中的问题,在树中 ,最基础的二叉树是我们的重点研究对象。ASDF三级目录...

2021-06-06 16:15:00 3588 36

原创 c语言 总结

c语言总结总结

2021-04-28 21:52:48 179 5

原创 c语言 初级链表

单向不带头非循环链表什么是链表最简单链表的增删查改什么是链表链表: 通过指针将一系列离散的数据关联起来的数据整体叫链表链表逻辑关系图示:插入一点题外话: 这个链表就像楼房一样 数据就是每一层的房间,这个指针就像楼梯 这样一比喻 就能明白什么时候需要到楼顶,什么时候不需要到楼顶。最简单链表的增删查改链表的创建链表的本质还是结构体,和线性表相比 线性表是连续的 因为 线性表是通过开辟一个连续的空间来存放的 链表的本质是通过指针将离散的结构体链在一起,所以叫链表。typedef int S

2021-04-17 20:33:14 669 11

原创 c语言 数据结构线性表

线性表线性表功能以及线性表的接口实现线性表功能以及线性表有动态线性表和静态线性表,线性表本质是有限序列。线性表和数组的区别:数组的大小是有限的 不可动态增加或减少。数组的访问可以直接下标引用,效率更高线性表是通过结构体实现的,线性表本质是一个结构体数组。线性表的接口实现接口实现与学籍管理系统,通讯录等无出其右,均是对结构体进行增 删 查 改 看创建一个结构体typedef int SLDataType;typedef struct SeqList{ SLDataTyp

2021-04-15 14:18:52 734 5

原创 c语言 文件操作指南

文件操作输入输出函数流操作函数输入输出函数流当前的计算机具有大量不同的设备,很多都与I/O操作有关,然而程序员并不关心这些通信细节 ,只关心I/O操作。就c程序而言所有的I/O操作都是从程序移出或者移入字节。这种字节源源不断就像水流一样 所以成为字节流,字节流简称为流。流的分类操作函数ascll c规定 使用FILE * fopen ( const char * filename, const char * mode );int fclose ( FILE * stream );下

2021-03-28 16:41:11 151 3

原创 c语言 动态内存规划

动态内存规划内存分区以及功能动态内存分配动态内存分配函数malloc和 free总结内存分区以及功能内存分配图各区功能特点 以 堆区 栈区 介绍栈区堆区动态内存分配戳这里内存分配办法动态内存分配函数malloc和 free动态内存开辟int main(){ int* pf1 = NULL; int* pf2 = NULL; pf1 = malloc(100); // 可移植性低 pf2 = malloc(10 * sizeof(int)); // 可移植性高 r

2021-03-22 19:16:04 242 2

原创 c语言 结构和联合

自定义类型结构体结构体基础知识枚举联合结构体结构体基础知识结构体和数组的差别创建一个结构体struct student //学生的数据类型{ char name[20]; int age;};也可以创建结构体指针 和结构体数组struct student* p; //结构体指针 ++跳过一整个结构体struct student arr[10]; // 结构体数组 存放10个结构体的访问枚举联合...

2021-03-20 17:00:30 1235 7

原创 c语言 联合和枚举

自定义类型联合联合定义联合的特点联合联合定义是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。比如:GREEN,BLUE};//联合类型的声明union Un { char c; int i; }; //联合变量的定义union Un un; //计算连个变量的大小printf("%d\n", sizeof(un)); 联合的特点联合的特点联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至

2021-03-20 16:59:06 167

原创 c语言重要库函数解读 和模拟实现————Qsort

Qsort排序Qsort功能![在这里插入图片描述](https://img-blog.csdnimg.cn/20210317184231522.png)冒泡排序Qsort使用Qsort模拟实现Qsort功能冒泡排序给定arr如图所示 10个元素 要求按照从小到大进行排序排序 思路 前后比较 若前面小于后面 则满足顺序排列,否则 则交换顺序从此图可看出来 判断的关键在于 两点比较对象为相邻元素若顺序则前小后大 否则换掉实现判断if (arr[i] > arr[i + 1])

2021-03-19 12:36:51 201

原创 c语言重要库函数解读 和模拟实现————常用字符串库函数

字符串库函数常用字符串库函数总结函数用途与实现char* strcat( char *s1, char *s2)的用途和实现char* strchr( char *s1, int ch)的用途和实现char* strcmp( char *s1, char *s2)的用途和实现char* strcpy( char *s1, char *s2)的用途和实现unsigned strlen( char*s)的用途和实现char* strstr( char *s1, char *s2)的用途和实现常用字符串库函数总

2021-03-14 17:58:52 1175 4

原创 c语言重要库函数解读 和模拟实现————常用字符函数

常用字符函数常用字符函数总结函数举例与实现int isalnum(int ch)的使用和实现int isxdigit(int ch)的使用和使用大小写转换以及判定大小写判定int islower(int ch)的功能和实现大小写转换常用字符函数总结常用字符函数需要的头文件是`#include<ctype.h>附上 ASCLLC码表函数举例与实现int isalnum(int ch)的使用和实现该库函数功能为是否为字母或数字经典案例 统计字符串中字母和数字的个数#includ

2021-03-13 21:26:22 1335 8

原创 c语言 指针集合

12121

2021-03-12 11:57:59 3197 13

原创 c语言 动态内存分配

动态内存分配数据类型总览内存分配1 整形内存分配2浮点数内存分配数据类型总览内存分配1 整形内存分配原码:直接将二进制按照正负数的形式翻译成二进制。其中最高位为符号位 正数为1 负数为0.反码:将原码的符号位不变,其他位依次按位取反就可以得到了。补码:反码+1就得到补码。注意 : 所有的操作都是对补码进行的 因为计算机操作是对内存中的补码进行的2浮点数内存分配...

2021-02-27 11:33:49 2988 10

原创 c语言 操作符系统解读

操作符详解总结大纲算术操作符移位操作符总结大纲算术操作符算数操作符 加减乘除取余数注意:取余数只可以对整数使用 //3 % 2; //3 % 2.0;下面两行都是错误写法 只可以整数取模 //3.0 % 2;/ 除号 没有浮点数则商为整数 有浮点数则使用浮点数除法加减乘除顺序遵循数学法则移位操作符<< 左移操作符 左移规则:最左一位舍弃 右边空缺的一位补0...

2021-02-07 18:17:50 392

原创 智力题 猜帽子戏法 看打脸活动

一群人开舞会,每个人的头上都顶着帽子。帽子有黑白两种,黑的至少一顶。每个人都能看到其他人的帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的什么帽子,然后关灯,如果有人认为自己的戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是在开灯,在看,大家在看一遍依然鸦雀无声。一直到第三次关灯才有噼噼啪啪的打耳光声音响起。问 有多少人戴着黑帽子思路分析假设自己本身就是戴着黑帽子的 然后逐渐增加带黑帽子人的数量。假设只有一个人带黑帽子如果只有自己一个人带黑帽子,那么我直接第一晚就发现了 因为戴黑

2021-02-04 12:02:07 728 5

原创 c语言关键字 关键词总结

关键字树状图总览数据类型关键字树状图总览数据类型关键字数据类型有 char int float enum short以及 long unsigned signed

2021-02-01 15:44:12 455 4

原创 sizeof strlen详细差别比较

sizeof和strlen的区别:1. sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’'结尾的。sizeof还可以用函数做参数,比如:short f();printf("%d\n",sizeof(f()));输出的结果是sizeof(short),即2。4

2021-01-31 19:44:19 305 1

原创 扫雷解析 C语言

扫雷扫雷流程思路1打印菜单2选择语句3打印棋盘4放置地雷5地雷检查字符1到数字1的转换方法附上一整套扫雷流程思路1打印菜单void menu(){ printf("********************\n"); printf("*****1.paly**********\n"); printf("*****0.excit*********\n"); printf("********************\n");}2选择语句int input = 0; do { sra

2021-01-29 17:47:07 195 2

原创 字符1到数字1的路线指南

1atoi();itoa();或者强制类型转换等2转换为数字1: 1-‘0’;//1为字符型转换为字符1: ‘0’+1;//1为整型3atoi(); 字符转化为数字itoa(); 数字转化为字符4‘1’-48;char(1+48);5‘1’-0x30;char(1+0x30);6之间相差10进制数487看看ASCII表81=‘1’-‘0’‘1’=1+‘0’这个够简单吧,不用记什么相差多少9查Ascii表101-0=‘1’-‘0’‘1’=1+‘0’-0

2021-01-29 17:26:16 453 3

原创 三子棋详解

三子棋详解三子棋功能实现下棋流程打印棋盘三子棋功能实现下棋流程打印棋盘

2021-01-27 17:40:55 2831

概率题库 考研数学 期末数学概率复习

概率题库 考研数学 期末数学概率复习

2021-08-14

空空如也

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

TA关注的人

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