自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】信号的基本概念、信号的产生、记录与处理

一、信号的基本概念信号在我们生活中随处可见,上课铃声、喇叭、红绿灯、警报、闹钟、电话铃声.....等等。我们知道即使信号没有产生,我们也知道该如何处理它,比如,红灯我们就该停,电话响就该接....。那是因为在第一次遇到他时,我们就记住了它的特征及其处理方法,所以我么就知道,如果产生这种信号该怎么办。那么总结如下:生活中:① 信号的产生的随机的;②  信号没有产生时,我们也知道它的作用;③ ...

2019-01-24 09:24:31 400

原创 【Linux】什么是Core Dump值?

Core Dump值最初接触到是在进程控制那个部分,(【Linux】进程的控制 ---- 创建、终止、等待、替换)其中进程终止时,子进程的退出状态status的位图如下:当一个进程要异常终止时,可以选择把进程的用户空间内存数据以文件的形式全部保存到磁盘上,文件名通常是core,这种行为叫做Core Dump。也叫核心转储。进程异常终止通常是因为有Bug,比如非法内存访问导致段错误。事后...

2019-01-23 16:38:56 448

原创 【Linux】进程间通信 ----- 消息队列(IPC资源)

system V消息队列消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法,每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值,消息队列也有管道⼀样的不⾜,就是每个消息的最⼤⻓度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有⼀个上限(MSGMNI)。消息队列也是ipc资源。IPC资源必须删除,否则不会自动...

2019-01-22 12:28:20 650

原创 【Linux】进程间通信 ----- 共享内存(IPC资源)

system v 共享内存每个进程都是独立的,当进程运行起来时,都有一个PCB,一个虚拟地址空间,一个页表,一个对应的物理内存,页表将每一个进程的PCB映射到物理内存的不同区域,保证了它们的独立性。但是如果两个页表都分别把进程虚拟地址空间的一些内容映射到物理内存的同一块区域,那么这样就实现了两个进程看到同一份资源了,而这一块公共的区域就叫做共享内存!如图所示:因为可以减少进程间数据拷贝...

2019-01-21 14:08:40 484

原创 【Linux】进程间通信 ---- 管道

一、进程间通信 进程间通信的本质它的本质就是让不同的进程看到一份公共的资源(内存的一段内存区域),该资源只能由第三方提供,即操作系统直接或者间接提供。进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 进程控制...

2019-01-20 14:51:41 290

原创 【Linux】进程的控制 ---- 创建、终止、等待、替换

进程创建(fork)进程创建不只有fork,其实bash跑一个程序也是创建一个进程,这里只说fork。1.初识 fork函数在Linux当中,fork函数是一个非常重要的函数,它能从已经存在的进程中创建一个新进程。新进程为子进程,原进程就是父进程。#include <unistd.h>pid_t fork(void);返回值:子进程中返回0,父进程返回子进程的id...

2019-01-18 20:54:24 309

原创 【Linux】Linux下如何生成及使用动态库与静态库?

静态库与动态库库这个概念对于我们来说并不陌生,在C语言中,我们使用了很多次库,比如printf。一般使用库其实是在用两个东西:一是对应的库文件,二是与库文件相对应的 .h 头文件。一般在在Linux中,库文件有两大类,分别是动态库(.so)和静态库(.a)。(Windows下为动态库(.dll)静态库(.a))静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时...

2019-01-17 14:09:05 366

原创 【Linux】Linux中怎么设置和删除环境变量

环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如PATH.在交叉编译中,会经常运用到环境变量的设置。查看当前全部的环境变量的命令是env.  查看环境变量的值是echo +$变量名。例如查看PATH的内容:echo $PATH 添加环境变量例如要将/home/admin/code/lib/include加入到环境变量LD_LIBRARY_PAT...

2019-01-16 16:41:45 28888

原创 【Linux】软链接与硬链接

在Linux操作系统下,我们知道 ls -l 命令 可以查看文件属性,如果再输入 ls-i 命令,我们会发现属性前面多了一串数字。这个数字就是 inode 。链接-->快速认识文件描述符及其分配规则;你不懂的 inode 是什么?很明显,inode它没有重复的。那么它和我们说的软链接、硬链接有什么关系呢?下面一一解答。 软链接软链接实际上就是一个文件,并且是一个独立的文件,它...

2019-01-16 11:24:52 196

原创 【Linux】再谈文件描述符之缓冲区

因为IO相关函数与系统调用接口对应,并且库函数封装系统调用,所以本质上,访问文件都是通过fd访问的。所以C库当中的FILE结构体内部,必定封装了fd。往标准输出写入有三种方法:printf(str1);//C库函数 fwrite(str2,1,strlen(str2),stdout);//C库函数 write(1,str3,strlen(str3));//系统调用来段代码研究下...

2019-01-15 16:51:19 1359

原创 【Linux】教你三分钟学会重定向

重定向是什么在学习了文件描述符及其分配规则(https://blog.csdn.net/Miss_Monster/article/details/86411039)之后,了解到操作系统总是找到当前files_struct的指针数组中没有被使用的最小的一个下标,作为新的文件描述符。在代码的结尾我们发现,文件可以通过close来关闭,既然可以关闭,那如果我将标准输出1关闭,再打开myfile文件,...

2019-01-14 09:04:05 482

原创 【Linux】快速认识文件描述符及其分配规则;你不懂的 inode 是什么?

文件描述符fd通过对open函数的学习,我们知道了文件描述符就是一个小整数,可以再次用代码验证一下。用系统调用函数open打开了四个文件,然后打印他们的文件描述符fd: 1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/stat.h> 4 #include &...

2019-01-13 15:08:46 1100

原创 【Linux】程序中 umask(0) 的含义

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bas...

2019-01-13 10:36:34 2706

原创 【Linux】文件相关系统调用接口(IO)

早期在写C语言接口的时候,我们可以通过fopen来打开一个文件,下面这段两段代码为例:hello.c写文件 1 #include <stdio.h> 2 #include <string.h> 3 int main () 4 { ...

2019-01-13 10:29:22 657

原创 【Linux】模拟实现一个 mini_shell

在学习了进程等待和程序替换及其相关函数之后,就可以实现一个我们自己简单mini_shell了。shell及其运行原理:https://blog.csdn.net/Miss_Monster/article/details/86370076 shell工作的基本过程1.读取用户由键盘输入的命令行。2.分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部...

2019-01-12 19:50:09 452

原创 【Linux】shell及其运行原理

Linux严格意义上来说是一个操作系统,但是我们的用户是无法直接与操作系统对话的,而是通过shell来使用。shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。 shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。当从shell或其他程序向 Linux传递命令时,内核...

2019-01-12 19:00:17 2678

原创 【C++】类和对象(4)类的六个默认成员函数

一、类的六个默认成员函数下面是一个Date类,但是它类中什么成员也没有,这就是空类。但是它虽然看起来什么都没有,实际上不是的,在我们什么都不写的情况下,它会自动生成六个默认的成员函数。如图所示的构造函数、析构函数、拷贝构造函数、赋值重载函数、普通对象取地址函数、const对象取地址函数这六个函数,就算我们自己不写,也会默认生成。class Date {};二、构造函数...

2019-01-11 19:41:10 297

原创 【Linux】vim编辑器个性化设置

由于我个人在使用vim时的一些需要,将vim进行了一些个性化配置,使之使用方便。   1 set shortmess=atI  ----启动时隐去援助提示                                                 2 syntax on  ----语法高亮  3 set backspace=2 ----设置 backspace可以删除任意字符...

2019-01-09 19:55:41 1257

原创 【C++】类和对象(3)—>> this指针

一、this指针的引入我们在现实中,定义一个类都是根据一个需求来定义的。所以先来看一个常用的日期类 Date 。class Date{public: void Print() { cout << _year << "-" << _month << "-" << _day << en

2019-01-09 18:54:01 253

原创 空指针引用故障(空指针解引用)

C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(Memory Leakage)、内存的重复释放、空指针解引用(NullPointer Dereference)。其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元 。当指针指向无效内存地址时对其引用,有可能...

2019-01-09 18:52:45 6240

原创 【C++】类和对象(2)类的作用域、类的大小的计算、类的实例化

一、类的作用域类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。否则找不到。class person{public: void PrintfPersonInfo();private: char _name[20]; char _gender[3]; int _age;};//这里需要指定Pri...

2019-01-09 17:41:52 435 1

原创 【C++】类和对象(1)类的定义、访问限定符、封装

一、概念认知类和对象是什么呢?初听到这个概念还不是很理解。其实类和对象可以说就是更好的模拟我们这个现实世界。面向过程的C语言关注的是一个一个的过程,实现一个一个的函数。 那么什么是面向对象呢?就是用另类的方式去认知我们的世界。从小到大,我们对于世界的认知就是分类的。我们不会说:哎,这有一只狗,那有一只狗。而是会说:这里有几只狗。我们会划分类别,将生划分为动物植物等,再把动物划分为猫...

2019-01-09 16:51:19 549

原创 【C++】指针空值 nullptr

在c++98中,指针空值为NULL,NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采...

2019-01-08 10:48:11 836

原创 【C++】基于范围的for循环(C++11)

一、语法概念在C++98中,如果要遍历一个数组,会有以下代码:void TestFor(){ int array[] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)//普通循环 array[i] *= 2; for (int* p = array;...

2019-01-08 10:48:05 655

原创 【C++】auto关键字

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。C++11中,auto有了全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。通俗地讲,auto关键字是可以自动推导变量类型的。需要注意的是,auto不是一个类型的“声明”,而是一个“占位符”,编译器在编译期会将...

2019-01-08 10:47:59 6390

原创 【C语言】冒泡排序

对于一组数字的排序,我们通过循环比较两个相邻元素的大小,若为升序排列则将最大值替换到最后。这样依次类推进行多趟冒泡排序即可将这组数字升序排列。       例如:10,9,8,7,6,5,4,3,2,1       通过一趟冒泡排序,我们将10置于最后一位。(9,8,7,6,5,4,3,2,1,10)       第二趟冒泡排序我们将9置于倒数第二位。(8,7,6,5,4,3,2,1,...

2019-01-08 10:47:37 499

原创 【C语言】使用可变参数,实现函数,求函数参数的最大值。

求若干个参数的最大值,我们假定第一个可变参数为最大值,定义为max,将之后的每一个可变参数和第一个可变参数相比较,始终在max里存放的是最大值。但是这里需要注意,每一次调用va_arg,都会指向下一个可变参数,因此我们需要将其值储存在临时变量里,以防指向错误。 #include <stdio.h>#include <stdlib.h>#include &lt...

2019-01-08 10:47:30 559

原创 【C语言】两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

根据异或我们可以知道,两个数字的二进制位按位异或,相同为0,相异为1。因此我们可以通过将两个数字按位异或,并计算该异或结果中二进制位中1的个数,即可知道有多少个比特位不同。int count(int a, int b){ int m = a ^ b; // 两个数按位异或,对应不同的位将会置1 int num = 0; while (m>0) { m =m &amp...

2019-01-08 10:47:13 242

原创 【C语言】结构体,枚举,联合

一.结构体类型创建结构体是一些值的集合,这些值称为成员变量。结构体的每一个成员可以是不同类型的变量。1.结构体的声明struct tag{  member-list;}variable-list;举例: 描述一个学生struct Stu{   char name[20];//名字   int age;//年龄   char sex[5];//性别   cha...

2019-01-08 10:47:03 337

原创 【C语言】函数指针、函数指针数组、函数指针数组的指针

一.函数指针1.定义理解函数指针:是一个指针,存放函数地址的指针。函数的地址可以通过取地址函数名拿到,也可以通过函数名直接拿到。2.函数指针(1)定义一个函数testvoid test(char *str){    printf("%s\n",str);}int main(){    //函数指针的定义方式    void (*p)(char *str) = test...

2019-01-08 10:46:54 1081 1

原创 【C语言】在杨氏矩阵中查找一个数字是否存在

题目:有一个二维数组(杨氏矩阵)数组的每行从左到右是递增的,每列从上到下是递增的。在这样的数组中查找一个数字是否存在。时间复杂度小于O(N)。此题的解决思路为:由于数组的每行从左到右是递增的,每列从上到下是递增的,因此右上角的这个数为该数所在这一行最大的数,为该数所在这一列最小的数,我们以数组右上角的这个数为基准进行比较。若我们要查找的这个数大于右上角的这个数,而右上角的这个数是这一行中最大的...

2019-01-07 18:37:26 292

原创 【C语言】写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)

定义一个数组,设定它的左右下标,同时定义一个中间下标mid,每次进行折半查找,若要查找的数比mid小,则右下标等于mid-1,若要查找的数比mid大,则左下标等于mid+1。若要查找的数等于mid,则循环停止。#include<stdio.h>#include<string.h>int main(){ int arr[10] = { 1, 2, 3, 4, 5...

2019-01-07 18:34:17 753

原创 【C语言】求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

 循环count次,第一次循环tmp等于0,所以tmp等于num,然后每次的tmp乘十加num,在加给tmp,实现累加。输入2和5,则计算2+22+222+2222+22222#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int num = 0; int count = 0; int s...

2019-01-07 18:32:21 461

原创 【C语言】编写程序数一下 1到 100 的所有整数中出现多少次数字9

取出1-99之间的每一位数的个位和十位,若等于9则count++取出个位的方法为a/1%10取出十位的方法为a/10%10 #include <stdio.h>#include <stdlib.h>int main(){ int a = 0; int count = 0; for (a = 1; a <= 100; a++) { i...

2019-01-07 18:29:36 301

原创 【C语言】将数组A中的内容和数组B中的内容进行交换。(两个数组一样大)

 在此题中,我们要利用for循环以及数组下标的引用,将两个数组中下标相同的元素进行互换,即可完成数组A中的内容和数组B中的内容交换。#include <stdio.h>#include <stdlib.h>int main(){ int arr1[] = { 1, 2, 3, 4, 5 }; int arr2[] = { 6, 7, 8, 9, 10 };...

2019-01-07 18:27:13 452

原创 【C语言】C语言的那些操作符

一、算数运算符       +加     -减     *乘     /除      %取模1.除法运算:若两个操作数都为整数则进行整数除法,若两个操作数有一个为浮点数则进行浮点数除法。2.取模操作符的两个操作数都必须为整数。二、移位操作符       <<左移     >>右移1.<<左移:移动二进制序列,向左移动,左边遗弃,右边补0...

2019-01-07 18:25:14 168 5

原创 【C++】内联函数

一、概念以 inline 关键字修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。如果在上述函数前增加 inline 关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。 二、特点1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内...

2019-01-07 18:01:02 173

转载 【Linux】linux下好玩的命令

1、yes命令,输出很多个y,可以用来对付选择很多y/n的应用。2、banner命令,打印字符标题,就是用字符拼出大字来:3、ddate命令,把日历转换成其他的什么历:4、fortune命令,随机输出一句话,或者是一句英文名言,或者是一首唐诗宋词来,如果没有唐诗宋词,那就需要用fortune-zh5、cal 9 1752,打印日历,但是这个月非常有意思(在9月2日后居然...

2019-01-07 14:40:23 681

原创 【C++】引用那些事(2)

一、传值、传引用效率比较以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。#include <time.h>struct A{ int a[10000];};void TestFun...

2019-01-07 13:19:54 302

原创 【C++】引用那些事(1)

一、什么是引用? 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。类型& 引用变量名(对象名) = 引用实体;void TestRef(){ int a = 10; int& ra = a;//<====定义引用类型...

2019-01-07 09:18:00 449 5

空空如也

空空如也

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

TA关注的人

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