自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2019-01-18 20:54:24 328

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

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

2019-01-17 14:09:05 385

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

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

2019-01-16 16:41:45 29187

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

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

2019-01-16 11:24:52 206

原创 【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 1422

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

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

2019-01-14 09:04:05 502

原创 【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 1133

原创 【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 2842

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

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

2019-01-13 10:29:22 674

原创 【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 467

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

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

2019-01-12 19:00:17 2720

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

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

2019-01-11 19:41:10 311

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

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

2019-01-09 19:55:41 1288

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

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

2019-01-09 18:54:01 268

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

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

2019-01-09 18:52:45 6286

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

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

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

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

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

2019-01-09 16:51:19 578

原创 【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 857

原创 【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 673

原创 【C++】auto关键字

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

2019-01-08 10:47:59 6508

原创 【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 518

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

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

2019-01-08 10:47:30 572

原创 【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 256

原创 【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 349

原创 【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 1100 1

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

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

2019-01-07 18:37:26 308

原创 【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 770

原创 【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 475

原创 【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 315

原创 【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 467

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

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

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

原创 【C++】内联函数

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

2019-01-07 18:01:02 187

转载 【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 694

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

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

2019-01-07 13:19:54 317

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

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

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

原创 函数的定义与声明的区别

C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描...

2019-01-06 15:42:38 27644 7

原创 【C++】函数重载

在我们的日常生活中,常常可以发现,有的词语有多重含义,即这个词被重载了。函数重载,其实是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或者类型或者顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。例如:int Add(int left, int right){ return left+right;}double...

2019-01-06 14:36:09 195

原创 【Linux】彩色进度条的实现

在写进度条之前,我们首先应该知道以下几个小问题: 1.fflush  在实现的时候,需要每次输出完使用fflush(stdout)将缓冲区刷新,以便下一次的输出。2.’\r’和 ‘\n’的区别:(1):回车用’\r’表示,表示的是回到这行的起始位置。(2):换行用‘\n’表示,表示的是换行到下一行。所以我们在实现时用的是’\r’,才能实现进度条的效果。3.如何彩色输出:...

2019-01-05 18:33:24 23385 1

原创 NULL,0,\0,'0'的区别

我们在学习过程中经常遇到NULL,0,\0,'0',常常疑惑它们是什么关系,下面就来分析一下:1、NULL: NULL 即空指针,不过在C和C++中并不一样。在VS 2013的库文件string.h中可以看到定义:1 /* Define NULL pointer value */2 #ifndef NULL3 #ifdef __cplusplus4 #define NULL ...

2019-01-05 14:38:21 2973

原创 可见字符&不可见字符

国际上普遍采用ASCII编码(American Standard Code for Information Interchange,美国信息交换标准代码)作为通用的字符编码。 在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来。 ...

2019-01-05 14:11:05 20222 2

空空如也

空空如也

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

TA关注的人

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