道_可
码龄2年
关注
提问 私信
  • 博客:43,799
    43,799
    总访问量
  • 75
    原创
  • 124,631
    排名
  • 396
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:待到来年花开,依旧

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:江苏省
  • 加入CSDN时间: 2022-09-27
博客简介:

m0_73969113的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    471
    当月
    0
个人成就
  • 获得540次点赞
  • 内容获得8次评论
  • 获得683次收藏
  • 代码片获得186次分享
创作历程
  • 22篇
    2024年
  • 53篇
    2023年
成就勋章
TA的专栏
  • Linux
    16篇
  • c++
    17篇
  • 数据结构
    13篇
  • c语言
    25篇
  • 题库
    8篇
兴趣领域 设置
  • Python
    python
  • 编程语言
    c语言
  • 数据结构与算法
    数据结构
  • 网络空间安全
    安全
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

如何理解Linux下的文件描述符 ?以及Linux下的重定向与缓冲区这一概念???

开始正式内容之前,会先大致描述一下我们在说些什么。所有是内容都是围绕文件描述符这一概念进行展开,但是并不会直接切入这一概念,因为这一概念并不是很难,但是因为文件描述符而涉及的周边概念是很广泛的,我会由周边涉及到的知识逐步递进,逐渐引入文件描述符。首先我们先解答下面的疑问。1.文件是什么?请参考C语言文件操作,总结一下就是,文件 = 内容 + 属性(属性也是数据)2.文件的相关操作是什么?无外乎两种:a.对内容的操作 b.对属性的操作3.访问文件本质是谁在访问?进程。为什么?
原创
发布博客 2024.04.25 ·
880 阅读 ·
23 点赞 ·
2 评论 ·
23 收藏

关于Linux下的进程替换(进程篇)

其实这里还涉及到一个写时拷贝的问题:在之前的博客中提及过,父进程创建子进程,代码是共享的,地址空间也是共享的,因为代码是不能更改的,而数据写时拷贝。-----------------------------------------------测试代码process_replace.c (下面的测试代码脚本都是这个)-------------------------------------官方的说法是:程序替换,是通过特定的接口,加载磁盘上的一个权限的程序(代码和数据),加载到调用进程的地址空间中!
原创
发布博客 2024.04.12 ·
848 阅读 ·
11 点赞 ·
0 评论 ·
20 收藏

关于Linux下的进程等待(进程篇)

最后思考一下:既然进程是具有独立性的,进程退出码,不也是子进程的数据吗?如果子进程已经退出,调用wait/waitpid时,wait/waitpid会立即返回,并且释放资源,获得子进程退出信息。waitpid/wait可以在存在多个子进程的情况下,让子进程退出具有一定的顺序性,将来让父进程进行更多的收尾工作。因为如果子进程退出,父进程不接收子进程的退出状态,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。只有子进程退出的时候,父进程才会调用waitpid函数,进行返回(注意,父进程依旧在运行)
原创
发布博客 2024.04.10 ·
894 阅读 ·
20 点赞 ·
1 评论 ·
30 收藏

关于父进程中的环境变量无法传递给子进程

这里是没有进入if语句的,因为第二次切割子串在 if 语句之后, g_argv[1] 为空,条件不成立,未进入语句,继续执行下面的代码,创建子进程进行程序替换,但是替换时export这样的命令是不存在的(我们编写的shell脚本内),所以出现了报错。今天在写shell脚本的时候,遇到一个棘手的问题,是关于环境变量,当时父进程的环境变量是无论如何也无法传递给子进程,重重排查,才找到问题所在,所以心血来潮,想写一下关于Linux下的环境变量具有全局属性的这个问题。环境变量是否具有全局属性?
原创
发布博客 2024.04.10 ·
858 阅读 ·
25 点赞 ·
0 评论 ·
12 收藏

关于Linux中的环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数不知道各位小伙伴会不会有疑问,为什么我们在Linux下运行自己写的程序前面需要加上./, 而而运行系统的指令是不需要加上./。这是为什么呢?return 0;total 20可以看到,执行a.out的时候前面需要加上 ./ , 而系统的指令ls是不需要的,这是为什么?
原创
发布博客 2024.04.09 ·
1064 阅读 ·
24 点赞 ·
0 评论 ·
12 收藏

详解简单的shell脚本 --- 命令行解释器【Linux后端开发】

原因是因为,当前我们自己写的shell,无论我们写的任何指令,都是交给了子进程 , 子进程进行进程替换帮助我们来完成的指令,那么指令就只会影响子进程,而不会影响父进程。那么我们想要的是shell脚本所在的路径发生变化,所以我们想要进行判断命令,如果是所谓cd这样的命令,那么我们不能创建子进程,而是直接交给父进程。这是一个需要注意的小细节的地方,因为在输入的时候,当我们最终输入字符结束的时候,会输入一个“回车”键盘,它会被缓冲区拿到并被识别为“
”。如果字符串中不存在更多的标记,则返回 NULL 指针。
原创
发布博客 2024.04.08 ·
1307 阅读 ·
23 点赞 ·
0 评论 ·
20 收藏

关于Linux下的进程创建与终止(进程篇 - 涉及写时拷贝,fork函数)

是可以自定义设置的所以:我们自己可以使用这些退出码和含义,但是,如果你想自己定义,也可以自己设计一套退出方案!
原创
发布博客 2024.04.07 ·
950 阅读 ·
14 点赞 ·
0 评论 ·
22 收藏

关于Linux下的进程状态(进程篇)

当系统中存在着大量的进程,那么一定会消耗大量的内存资源,此时,系统不得不通过把内存中的进程(对应的代码和数据)交换到磁盘,从而保证内存中仍有空余的空间,此时,对于被交换的进程来说,状态就被称为挂起。所以为了防止这样情况的发生,才有了D状态,他的意思是告诉系统,我是不可以被干掉的,只能等我传输成功,从睡眠中醒来才可以干掉我这个进程。或者来说c语言中的scanf,c++中的cin,在系统中不也是在等待键盘资源的输入嘛,当我们的程序存在这些命令的时候,如果此时不在键盘上输入,那么此时的进程就处于阻塞状态。
原创
发布博客 2024.04.06 ·
911 阅读 ·
12 点赞 ·
0 评论 ·
29 收藏

关于Liunx下的进程概念

的方式运行一个程序的时候,本质上,就是在系统层面上创建一个进程,Linux是可以同时加载多个可执行程序的,意味着系统中是会出现同时存在大量进程的情况。I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。通过对进程对应的PCB结构的增删查改,也就实现了对进程的管理。标示符: 描述本进程的唯一标示符,用来区别其他进程。
原创
发布博客 2024.04.06 ·
430 阅读 ·
5 点赞 ·
0 评论 ·
5 收藏

简单聊聊冯诺伊曼体系结构

小a:键盘输入(制造产品)--- > 加载到内存 --- > 内存交给cpu(进行打包,封装,填写收件人信息)--- > 加载到内存 --- > 输出设备(通过网卡发出快递)小b:网卡输入(收到产品)--- > 加载到内存 --- > 内存交给cpu(拆掉快递,撕开包装)--- > 加载到内存 --- > 输出设备(显示器打印信息)b.如果没有存储器参与进来,那么cpu就没有操作的空间,只能与外设直接交互,有存储器的话,可以让软件(系统)参与进来,进行更加合理的分配。为什么不能直接让cpu与外设直接交互?
原创
发布博客 2024.04.03 ·
337 阅读 ·
3 点赞 ·
0 评论 ·
5 收藏

哈希表以及哈希表的底层结构 --- 万字解说【c++11】

-(常用)取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B优点:简单、均匀缺点:需要事先知道关键字的分布情况使用场景:适合查找比较小且连续的情况。
原创
发布博客 2024.03.29 ·
717 阅读 ·
27 点赞 ·
0 评论 ·
29 收藏

浅谈linux下的进程地址空间(虚拟地址/线性地址)

示例:运行之后发现:同一个变量,同一个地址,在运行一段时间后,竟然会在同一时间出现两个不同的值?这是完全违背常理的,按道理来说一个 int类型 ,只能存储一个整数,为什么这里会出现两个完全不同的值呢???要想了解这个问题,我们需要先了解一些东西。linux下的地址空间:注意,这里指的是虚拟地址空间【说明】1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
原创
发布博客 2024.03.25 ·
1132 阅读 ·
15 点赞 ·
0 评论 ·
28 收藏

linux环境基础开发工具3(git 、 gdb)

注:这个可以理解为是执行完当前函数,vs是没有这一功能的,vs一般是在函数的开头与结尾处设置断点。list/l 行号:显示程序源代码,接着上次的位置往下列,每次列10行。print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。注:开始调试,如果没有设置断点,程序就直接结束 - 相当于vs中的f5。注:可以理解为vs中运行至下一个断点,如果中途没有断点,程序直接结束。:显示程序源代码,接着上次的位置往下列,每次列10行。注:删除的时候不能输入行号,只能输入编号才可以删除成功。
原创
发布博客 2024.03.14 ·
774 阅读 ·
19 点赞 ·
0 评论 ·
29 收藏

linux环境基础开发工具2(gcc/g++ 、 make/ Makefile)

static。
原创
发布博客 2024.03.14 ·
657 阅读 ·
20 点赞 ·
0 评论 ·
23 收藏

linux环境基础开发工具1(vim 、 yum)

在Linux下安装软件一个通常的办法是下载到程序的源代码并进行编译得到可执行程序但是这样太麻烦了,于是有些人把一些常用的软件提前编译好做成软件包可以理解成windows上的安装程序)放在一个服务器上通过包管理器可以很方便的获取到这个编译好的软件包直接进行安装软件包和软件包管理器就好比"App"和应用商店这样的关系是Linux下非常常用的一种包管理器主要应用在Fedora, RedHat,Centos等发行版上。
原创
发布博客 2024.03.14 ·
1123 阅读 ·
7 点赞 ·
0 评论 ·
32 收藏

数据结构中的平衡搜索树 --- 红黑树 (如何旋转与变色)

红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O($log_2 N$),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。这时会发现违反性质3比违反性质4的代价要更小,而事实上也的确是这样做的,可能会有疑问,这样还是红黑树嘛,其实新增节点之后是需要通过变色来达到红黑树的结构的。此时我们会发现,最后的结构是符合红黑树的:没有出现连续的红色节点;
原创
发布博客 2024.03.13 ·
799 阅读 ·
27 点赞 ·
0 评论 ·
30 收藏

数据结构中的平衡搜索树 --- AVL树是怎样进行旋转处理的?(平衡因子版本)

树做一些结构修改的操作,性能非常低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。):第一次单旋会把30节点 、60节点 的平衡因子置成 0,第二次单旋会把60节点 、90节点 的平衡因子置成 0 ,这显然是不对的,因为90节点最后的平衡因子应该是1。因为AVL树也是二叉搜索树,可按照二叉搜索树的方式将节点删除,然后再更新平衡因子,只不错与删除不同的时,删除节点后的平衡因子更新,最差情况下一直要调整到根节点的位置。什么时候右旋,什么时候双旋呢?
原创
发布博客 2024.03.12 ·
677 阅读 ·
9 点赞 ·
0 评论 ·
13 收藏

二叉搜索树 - c++实现

对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度的函数,即结点越深,则比较次数越多。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。b、最多查找高度次,走到到空,还没找到,这个值不存在。,统计成功后,给定单词就可快速找到其出现的次数,
原创
发布博客 2024.01.22 ·
836 阅读 ·
15 点赞 ·
0 评论 ·
16 收藏

关于c++的三大特性 --- 多态(底层原理)

建议看下面的内容之前,先看一下这里我们先来看一个笔试题:请问 sizeof(Base)是多少?为什么呢?按照内存对齐的规则,这里应该是4byte,为什么是8byte呢?调试一下:通过观察测试我们发现,。一个含有虚函数的类中都至少都有一个虚函数表指针,因为虚函数的地址要被放到虚函数表中,虚函数表也简称虚表。
原创
发布博客 2024.01.19 ·
843 阅读 ·
15 点赞 ·
0 评论 ·
20 收藏

c++三大特性之多态

从上面可以看出,C++对函数重写的要求比较严格,但是有些情况下由于疏忽,可能会导致函数名字母次序写反而无法构成重载,而这种错误在编译期间是不会报出的,只有在程序运行时没有得到预期结果才来debug会得不偿失,因此:C++11提供了。),所以就算是子类不加 virtual 关键字,也认为是虚函数,因为父类就是虚函数,子类继承也是虚函数,当然,也可以认为是个例外。,派生类继承的是基类虚函数的接口,目的是为了重写,达成多态,继承的是接口。但是在这个地方,我们认为子类重写了这个虚函数,重写体现的是。
原创
发布博客 2024.01.09 ·
879 阅读 ·
17 点赞 ·
0 评论 ·
19 收藏
加载更多