自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 进程(十) 进程替换

多种进程替换函数。

2024-01-05 22:02:32 1170

原创 Linux 进程(九) 进程等待

status是一个整形,有三十二个bit位,前16个bit位不用,后十六个bit位的前八位表示进程退出时的退出码,后七位表示进程退出时收到的信号。该代码,总共运行十三秒,前五秒父进程子进程一起运行,前五秒过后子进程退出。中间五秒父进程等待回收子进程,这时会看到子进程僵尸的状态,中间五秒后,父进程回收子进程。非阻塞调用表示:父进程基于非阻塞的轮询访问子进程,访问一次子进程发现没有结果,然后就返回,不必等到子进程有结果才返回。子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏,

2024-01-04 21:36:29 478

原创 Linux 进程(八) 进程的退出码

函数也是有返回值的。而_exit是系统调用接口,exit是c语言提供的库函数,库函数是不能终止进程的,只有操作系统提供的系统调用才能够终止进程,那么他们的关系就比较明确了。他们两个的功能是一模一样的,exit是c语言给我们提供的接口,而_exit是linux系统给我们提供的接口,那么二者有什么区别呢?进程出现退出是进程收到了异常的信号,每个信号都有不同的编号,每个编号都有自己的异常原因。查看最近一个进程的退出状态,查看到的是0 表示的就是成功。exit是终止进程 其中status:是进程退出时候的退出码。

2024-01-04 21:36:07 1314

原创 Linux 进程(七) 进程地址空间

下面我们来看一段代码。

2024-01-03 21:46:18 2612

原创 Linux 进程(六) 环境变量

答案是可以的,bash在创建子进程时,同时创建了两张表,一张命令行参数表,一场环境变量表,都传递给了其创建的子进程。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。bash 帮我们维护一个数组数组里面存储着我们输入的命令行参数的地址,bash读取命令行参数以空格为间隔,将这串字符传给main函数,也就造成了上面我们看见的情况。这是一个常见的main函数,那么main函数可以带参吗?

2024-01-03 21:45:41 490

原创 Linux 进程(五) 调度与切换

在只考虑一个CPU的情况下,这些进程“看起来像”同时运行的,实则是轮番穿插地运行,由于时间片通常很短(在Linux上为5ms-800ms),用户不会感觉到。在runqueue上还存在着两个指针,查看英文释义,一个是活跃的,一个是到期的。cpu寄存器只有一套,但是里面存储的进程的数据却可以有很多套,虽然数据存储在一个共享的cpu设备里,但是某个进程的数据,都是被某个进程所私有的!普通的运行队列都是FIFO的机制,Linux下的调度算法是考虑到优先级,考虑到效率和考虑到饥饿的问题。这两个指针是怎么切换的呢?

2024-01-02 22:04:27 1052

原创 Linux 进程(四) 优先级

这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行所以,调整进程优先级,在Linux下,就是调整进程nice值。需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

2024-01-02 22:04:09 347

原创 Linux 进程(三)

状态查看,僵尸进程,孤儿进程

2023-12-02 21:45:13 1142

原创 Linux 进程(二)

Linux 下使用 ls /proc 查看程序中的进程,其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录,那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序,可执行程序需要依赖源代码,所以不管是进程和可执行程序都默认生成在跟源代码同一级的目录下。 怎么更改当前工作目录呢? chdir。 查看chdir的使用手册。 用法如下,更改完成后,再去查看cwd 就会发现

2023-11-29 22:23:51 1178

原创 Linux 进程(一)

校长需要c语言成绩最好的,谁跑步最快的,谁挂科最多,都可以在这张链表中查,当有田径会校长通过查链表就知道派谁去,当考试完成后校长通过查链表就知道,该让谁滚蛋(滚蛋后校长就把该同学的节点删除),这样通过管理数据管理链表,就能实现对学生的管理。

2023-11-29 22:23:32 1028

原创 C++ string类(二)

【代码】C++ string类(二)

2023-11-28 21:30:01 451

原创 冯诺依曼体系结构

我们平时用一些输入设备时候,比如键盘,话筒等,输入的速度很慢,与cpu运算速度相差了很大的量级,此时cpu会早早把输入的数据处理完成而处于闲置的状态,造成了资源的大大浪费,那么cpu就不需要做的这么高效与精细了。决定整个计算机的效率从cpu变成了某些硬件。内存出现的意义是的计算机的效率都变高了,把硬件之间拷贝效率的问题,转化成为软件的问题(软件问题就是操作系统写的怎么样,能不能预加载和缓存... ...)。数据信号的流动就是数据在计算器的各个硬件之间的之间的拷贝,拷贝速度越快,计算机工作的速度也就越快。

2023-11-28 21:29:30 464

原创 Linux调试器-gdb使用

disable ‘断点号’ 注意是断点号,而不是行号。从查看断点信息哪里可以知道断点号。然后一直按 enter 就可以显示全部代码了,enter 可以记住上一个我们的指令。要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。Linux gcc/g++出来的二进制程序,默认是release模式。开始调试:直接gdb,我们生成的可执行程序就可以开始调试了。程序的发布方式有两种,debug模式和release模式。开始调试后只按 l 的话会出现部分行号,如果想要从头开始的话,需要按 l0。

2023-11-27 22:15:51 991

原创 Linux git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。⽂档如此,我们写的项目代码,也是存在这个问题的!“报告-究极进化版”?

2023-11-27 22:15:35 1236

原创 C++ string类(一)

一些其他用法:C++内置提供了swap函数,以及string 提供了reverse;注意:1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。2. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

2023-11-17 21:45:26 523

原创 C++ STL简介

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。2. STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP 版本--所有STL实现版本的始祖。P. J. 版本。

2023-11-16 22:25:10 164

原创 C++ 模板 (一)

如何实现一个通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数 2. 代码的可维护性比较低,一个出错可能所有的重载均出错 那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成对应的函数呢? 如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),

2023-11-16 22:24:50 372 1

原创 Linux 小程序-进度条

不是的,因为c对io函数提供了一个缓冲区,这段代码执行的结果先被保存在缓冲区中,之后等程序完成后才刷新到屏幕上。上面写的进度条并没有根据实际的下载进度来显示进度,而是以固定模式来显示进度。是先执行了sleep(3);我们可以根据当前的实际情况来显示进度,比如根据文件的传输速率来显示进度。以前的键盘会有一个这样的按键 ,这个键就是回车与换行。注意:在linux下 “\r” 是回车然后在打印。回车:从当前行回退到当前行的起始位置。这样就能在显示行打印出倒计时的感觉了。换行:从当前行切换到下一行的该位置。

2023-11-15 22:03:41 437

原创 Linux项目自动化构建工具-make/Makefile

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了,一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

2023-11-15 22:03:26 241

原创 C/C++内存管理

new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数class Apublic:: _a(a)~A()private:int _a;delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;在vs2013版本编译器下:new多个对象时,系统会自动在对象前面加上。

2023-11-14 22:21:37 571

原创 Linux 函数库

最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?通过静态链接所生成的可执行文件的属性和动态库还是不同的。

2023-11-14 22:21:11 205

原创 c++类和对象(八) static成员 && 友元

定义时不添加static关键字,

2023-11-05 21:28:35 431

原创 C++类和对象(七)const成员 && 及其初始化列表

3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。1.能定义成const的成员函数都应该定义成const,这样const对象。2.要修改成员变量的成员函数,不能定义成const。

2023-11-03 22:27:16 226

原创 预处理详解(二)

许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。例如:当我们根据同一个源文件要编译出一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大些,我们需要一个数组能够大些。for(i = 0;//linux 环境演示。

2023-11-03 22:27:06 118

原创 预处理详解(一)

define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。下面是宏的声明方式:其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。参数列表的左括号必须与name紧邻。如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。这个宏接收一个参数 x .如果在上述声明之后,你把5 * 5警告:这个宏存在一个问题:int a = 5;

2023-11-01 19:27:11 76

原创 linux下的程序环境和预处理(gcc演示)

在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接

2023-11-01 19:26:40 256

原创 Linux编辑器-vim使用

三种模式正常模式插入模式底行模式vim操作打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。

2023-10-30 21:29:33 1296

原创 Linux 权限管理(二)

linux前都会有一串这个字符,第二字符到第九字符分别表示拥有者,所属组,和other所对应的权限。为什么我们创建的普通文件:默认权限不是777 而是664。为什么我们创建的目录文件:默认权限不是777 而是775。说明:只有文件的拥有者和root才可以改变文件的权限。常用选项:-R 递归修改文件或目录的所属组。+:向权限范围增加权限代号所表示的权限。-:向权限范围取消权限代号所表示的权限。=:向权限范围赋予权限代号所表示的权限。R -> 递归修改目录文件的权限。功能:修改文件或目录的所属组。

2023-10-30 21:29:14 137

原创 C++ 类和对象(六)赋值运算符重载

也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字注意:不能通过连接其他符号来创建新的操作符:比如operator@重载操作符必须有一个类类型参数用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。

2023-10-22 21:55:41 277

原创 C++类和对象(五) 拷贝构造函数

因此当我们创建形参的时候就要调用拷贝构造,调用拷贝构造的时候就会创建形参 ...... ........因此形成无穷递归调用。3.

2023-10-22 21:23:36 476

原创 C++类和对象(四) (构造函数 && 析构函数)

6. 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依旧是随机值。也就说在。

2023-10-20 19:38:07 672

原创 C++类和对象(二)(类对象的存储方式)

问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?缺陷:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一。个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次,浪费空间。所以说符合第三种情况,每个类中的。对象中包含类的各个成员。

2023-10-20 16:34:41 70

原创 C++类和对象(三) (this指针)

Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?2. 只能在“成员函数”的内部使用。我们先来定义一个日期类 Date。当对象调用成员函数时,将对象地址作为实参传递给。即成员函数中,不能给this指针赋值。

2023-10-20 16:31:49 164

原创 shell命令以及运行原理

我们来举个简单的例子来解释:张三是个刚大学毕业的程序员,老大不小,到了结婚的年纪了,对隔壁家的如花暗恋已久。王婆不好意思直接去告诉张三如花的心意,但是由于张三的爹是村长,只好让实习生去告诉张三。这样事情即使办砸了,王婆既能给村长一个交代就说,实习生业务能力不强,又能使自己不受牵连。王婆第一次去如花家给张三说媒,但是如花却不愿意,王婆回去告诉张三如花的心意,但张三不死心。过两天又让王婆去,结果王婆还没进门,就发现李四在如花家中吃饭,这时候王婆就懂了。此时王婆已经了解到如花的心意,知道张三的请求是不可能的。

2023-10-16 22:27:56 192 1

原创 Linux权限的概念 及 权限管理

此时我们需要链接 sudoers 白名单,在名单中的便可以执行有限的root权限,不在白名单的就如下。我们不想让把自己变成root ,但是需要一定的root权限怎么办呢?也就不同,比如群主的“禁言”,“踢人” ... ... , 但要清楚的是,换个也当群主也能干这些事情!比如qq群,群主就是。“身份” “身份” “身份”

2023-10-16 22:27:36 25

原创 Linux 基本指令(下)

关于 tar 命令我们目前直到这三个就可以了。

2023-10-10 22:27:50 295

原创 C++ 类和对象(一)

class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员一般情况下,更期望采用第二种方式。

2023-10-10 22:27:37 428

原创 C++基础知识(四) -- 内联函数

宏与内联函数的区别和联系......

2023-10-06 21:40:45 70

原创 C++基础知识(三) -- 引用

2. 一个变量可以有多个引用3. 引用一旦引用一个实体,再不能引用其他实体。

2023-10-05 22:21:44 221

原创 C++基础知识(二) -- 函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!是函数的一种特殊情况,C++允许在中声明几个功能类似,这些同名函数的,常用来处理实现功能类似数据类型不同的问题。

2023-10-05 08:41:29 205

空空如也

空空如也

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

TA关注的人

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