- 博客(43)
- 收藏
- 关注
原创 Linux线程池的实现
线程池线程池是线程的一种使用模式,是管理和利用多线程处理多任务的一种方法。解决的问题 当线程过多时,会带来调度开销,进而影响整体性能; &nbs...
2019-09-24 13:51:57
258
原创 Linux信号量的理解和使用
信号量信号量是一个计数器,可用于实现多线程和多进程之间的临界资源访问安全和合理性,即同步与互斥; 这里我主要实现的是线程间的同步与互斥;信号量分类信号量可分为:内核信号量和用户信号量 内核信号量:由内核控制路径使用  ...
2019-09-21 14:58:29
714
原创 Linux多线程
Linux线程线程是进程内部的控制序列也就是一个执行流;Linux下的线程以进程pcb模拟实现的,并且这些pcb共用同一个虚拟地址空间,共享进程中的大部分资源;Linux下的线程实际上是一个轻量级进程,相较传统进程更加轻量化;进程与线程之间的联系和区别进程是操作系统资源分配的基本单位;程序运行后资源是分配给线程组的;线程是CPU调度的基本单位;CPU通过调度线程pcb实现程序调度一...
2019-09-19 12:59:51
170
原创 Linux进程信号操作
信号捕捉流程:以SIGQUIT为例:用户程序注册了SIGQUIT信号的处理函数sighandler。当前正在执行main函数,这时发生中断或异常切换到内核态。在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。内核决定返回用户态后不是恢复main函数的上下文继续执行,而是执行sighandler函数,sighandler和main函数使用不同的堆栈空间,它们之...
2019-09-18 21:15:27
122
原创 Linux进程信号
Linux中的信号及产生原因这里就不再多说。若有不了解可查看Linux中信号signal及其产生原因进程信号linux中的信号种类:62种 1~31非可靠信号 34~64可靠信号进程信号是进程之间事件异步通信的一种方式,属于软中断。通俗的来说软中断是由进程产生的,硬中断是由硬件产生的。硬中断是外部设备对CPU的中断,软中断是中断底半部的一种处理机制,信号则是由内核(或其他进程)对...
2019-09-18 11:49:35
82
原创 进程间通信
进程间通信 通俗来讲在使用正在运行中程序时,不可避免需要在程序间通信一些数据,这就是进程间通信。 进程间通信(IPC,Interproc...
2019-09-17 15:07:03
105
原创 C++关联式容器(下)底层基础
哈希表unordered系列关联式容器 使用方式与红黑树型关联式容器相似,底层实现不同。查询效率高达O(logn),最差情况下比肩红黑树的查找效率。底层结构哈希:是一种不经过任何比较,直接从表中获取想要搜索的元素,通过某种函数(hashFunc)建立关键码与存储位置之间的联系。简单的哈希函数: &nbs...
2019-09-17 10:15:55
206
1
原创 C++关联式容器(上)map,set的实现
基于红黑树实现的map:RBTree.hpp//RBTree.hpp#include<iostream>#include<time.h>using namespace std;enum COLOR{RED,BLACK};template<class V>//红黑树节点定义struct RBTNode{ RBTNode(const V...
2019-09-10 17:20:10
155
原创 C++关联式容器(上)底层基础
STL的容器大致分为两类,序列式容器和关联式容器,两者直接区分通过数据在容器中的排列来区分。 关联式容器也是用来存储数据的,与序列式容器不同的是,关联式容器内部存储的是键值对,数据检索时效率比序列式容器高。元素的获取方式: &nb...
2019-09-06 10:52:55
305
原创 C++智能指针
在普通指针使用时,需要记住分配的内存手动释放,否则就会造成内存泄漏。智能指针的用途是帮助程序员,管理内存资源的一种方式,不用手动的释放资源。智能指针是基于RAII思想产生的一种控制内存程序资源的方式。RAII RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单技术。...
2019-09-05 22:01:16
103
原创 C++类型转换
C语言的类型转换隐式类型转换强制类型转换转换的可见性差,强制类型转换的安全性差。C++的类型转换标准C++为了增强类型转换的可视性,引入了四种强制类型转换操作符。static_castreinterpret_castconst_castdynamic_caststatic_caststatic_cast用于非多态的类型转换(静态转换),编译器任何隐式执行的类型转换都可...
2019-09-04 12:36:08
82
原创 C++异常
异常是指在程序运行过程中可预料的执行分支。bug是指程序中的错误,及不可预料的分支。C++异常处理概念异常处理是一种错误处理的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接调用者处理这个错误。throw:当问题出现时,程序会抛出一个异常,这是通过throw关键字完成的。try:try块中的代码标识着将会被激活的特定异常,后常接一个或多个catch块catc...
2019-09-04 09:43:58
119
原创 C++多态
多态就是一个事物再不同场景时的多种形态,编程语言中就是完成某个行为时,当不同对象去完成会产生不同的效果。多态的定义及实现调用函数的对象必须为指针或引用被调用函数必须是虚函数,且完成了虚函数的重写虚函数定义: 定义类的成员函数时,函数前加virtual关键字。虚函数的重写:&n...
2019-09-03 21:56:33
99
原创 C++继承
C++作为一门OOP语言,必定有面向对象语言的三大特性:封装,继承,多态.继承作为面向对象语言代码复用的重要手段,继承允许我们在原有类的基础上进行扩展,增加功能。继承是类层次上的复用,呈现面向对象语言的层次结构设计。继承的权限问题:public继承:直接继承基类中的public,protected成员为派生类的public,protected成员protecedt继承:继承基类中的pu...
2019-09-03 11:33:04
109
原创 对于模板的进一步理解
泛型编程的目的:发明一种语言机制,能够帮助实现一个通用的标准容器库。泛型编程是一种编程风格,其中算法以尽可能抽象的方式编写,而不依赖于将在其上执行这些算法的数据形式。泛型编程的代表作品:C++的STL(标准模板库)模板的参数分为类类型形参和非类型形参template<class T, typename T2, size_t N = 10>类类型形参:出现在参数列表,用cla...
2019-09-01 15:44:44
238
原创 简单理解容器适配器
适配器: 适配器是一种设计模式,将一个类的接口转换为用户希望的另一个类的接口,使接口不兼容的类一起工作,体现了代码复用的思想。通俗来说适配器是一种转换器,例如充电头,将220V电压转换为5V。STL的适配器有三种类型:容器适配器stack-queue-priority_queue迭代适配器函数适配器s...
2019-08-28 17:44:03
162
原创 C++容器中list总结及其实现
listlist为双向带头循环链表,由若干结点组成,每个结点都包含一个数据块,前驱指针和后驱指针。list存储在非连续的空间之中,所以相较vector来说list的随机检索能力很弱,检索时间复杂度为O(n)。优点:插入,删除元素的代价较小可在两端进行操作不需要连续的内存空间缺点:不支持随机访问 [ ], at内存占用多相关使用函数:push_back ...
2019-06-02 16:16:00
300
转载 为什么C++编译器不能支持对模板的分离式编译
为什么C++编译器不能支持对模板的分离式编译刘未鹏(pongba)C++的罗浮宫(http://blog.csdn.net/pongba) 首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32)...
2019-05-14 19:46:51
124
原创 编写简单的shell(输入输出重定向)
#include <stdio.h>#include <errno.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <wait.h>#include <ctype.h>...
2019-04-21 22:50:32
540
原创 Linux下的IO
基础IO:标准库的IO接口 fopen fclose fread fseek fwrite -----------FILE*标准库的接口是对系统库接口的一种封装fopen:FILE * fopen(const char * path, const char * mode);//返回值:文件顺利打开后,指向该流的文件指针就会被返回。//如果文件打开失败则返回 NULL,并把错误代码存在e...
2019-04-21 14:19:33
145
原创 模拟实现Vector
#include<iostream>#include<assert.h>#include<string.h>#include<algorithm>using namespace std;template<class T>class Vector{ typedef T* Iterator; typedef const T*...
2019-04-20 10:50:36
136
原创 C++内存管理
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190414164319296.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTg1NjAy,size_16,color_FFFFFF,t...
2019-04-14 16:52:55
186
原创 C++类与对象 进阶
类的默认成员函数List item构造函数析构函数List item拷贝构造函数取址运算符(&)重载赋值运算符重载const 修饰的取址运算符重载构造函数: 构造函数是一种特殊的成员函数,名称与类名相同,创建类类型对象时由编译器自动调用,生命周期只有一次。任务:不是开空间创建对象,而是初始化对象特征:无返回值对象实例化,自动调用构造函数构造函数可重载编译...
2019-04-14 16:07:48
210
原创 环境变量 setenv函数 和 export命令
环境变量 用于设置系统运行环境参数的变量--拥有全局特性查看方法:envsetecho+$+环境名称删除方法:unset常见环境变量:PATH:指定搜索命令HOME:指定用户主目录SHELL:当前shellsetenv函数#include <stdlib.h>int setenv(const char *name, const char *v...
2019-04-12 20:28:49
1614
原创 Linux进程的创建, 等待,终止,替换
进程的创建:fork()函数复制:复制pcb–代码共享,数据独有 返回值:父进程返回子进程的PID>0 子进程返回0vfork()-父子进程共用同一块虚拟地址空间子进程先运行,并且子进程退出后或子进程替换运行另一段程序后,父进程才开始运行https://blog.csdn.net/qq_42185602/article/details/89254091进程的终止:终止场景:...
2019-04-12 19:49:09
110
原创 process_create
封装fork wait创建进程#include<unistd.h>#include<stdio.h>#include<sys/wait.h>#include<errno.h>typedef int pid_t;void process_create(pid_t *pid, int (*func)(), void *arg[]){ ...
2019-04-12 19:37:20
140
原创 fork popen system区别及用法(进程创建)
fork:fork与进程创建有关:fork函数在进程中创建子进程子进程复制父进程的pcb -------代码共享, 数据独有 #include <unistd.h> pid_t fork(void);#include<unistd.h>#include<stdio.h>#include<wait.h>...
2019-04-12 19:30:00
507
转载 Linux 中 信号signal 及其产生原因
输入 kill -l 查看所有的信号其中每个信号的产生原因转自 http://blog.csdn.net/wesleyluo/article/details/5279482信号 取值 默认动作 含义(发出信号的原因)SIGHUP 1 Term 终端的挂断或进程死亡SIGINT 2 Term ...
2019-04-12 16:36:27
1485
原创 简单实现进度条
#include<stdio.h> #include<unistd.h> #include<string.h> int main() { int i =0 ; char bar[100]; memset(bar,0,sizeof(bar)); //初始化bar const char *lable ...
2019-04-08 21:10:59
154
原创 yum和rpm
rpm安装软件rpm的使用rpm -ivh name.rpm ##安装 ,-v显示过程,-h指定加密方式为hash -e name ##卸载 -ql name ##查询软件生成文件 -qlp name.rpm ...
2019-04-08 21:00:01
69
原创 C++类与对象
众所周知:c语言是一门面向过程的高级编程语言,而c++是一门面向对象的高级编程语言。两者之间的区别:C语言面向过程,关注的是过程,分析求解问题的步骤,通过函数调用逐步解决。C++基于面向对象,关注的是对象,将问题拆解为对象,通过对象交互完成求解。C++下对象的生成是依靠类来实现的。类是物质世界存在的抽象,这种抽象基于需求来选择。对象是类的实例化。类的定义:class classNa...
2019-04-04 15:06:31
104
原创 Linux下权限的相关概念
权限:[root@localhost eagle]# ls -l /etc/passwd-rw-r--r--. 1 root root 2287 Mar 5 06:24 /etc/passwd用户:普通用户,root用户文件用户分为:文件所有者u 文件所属组g 其他用户o文件操作:可读:r可写: w可执行性: x目录操作(对于rwx):r 查看目录内容w...
2019-03-27 21:44:12
123
原创 Linux下的部分重要目录和命令
/proc:虚拟文件系统,此目录是kernel加载后,在内存里面建立的一个虚拟目录,有专属的文件系统,主要提供系统一些实时的信息,此目录下不能建立和删除文件;(某些文件可以修改)/proc主要作用可以整理为:–整理系统内部的信息;–存放主机硬件信息;–调整系统执行时的参数;–检查及修改网络和主机的参数;–检查及调整系统的内存和性能/sys:虚拟文件系统,被建立在内存中,是在2.6版的...
2019-03-27 21:25:26
341
原创 C++入门
C++ 是一门面向对象的语言。C++98 是C++标准第一个正式版本,现在阶段C++还在不断更新中,是一门值得深入学习的编程语言。下面是我对C++初学的一些基本了解。命名空间:namespace对标识符的名称本地化一个命名空间就定义了一个新作用域编译器会合并命名空间相同的命名空间缺省参数(C语言不支持):声明或定义函数时为函数参数指定默认值半缺省参数 由右到左依次给出,不能间隔缺...
2019-03-27 19:54:29
82
原创 文件操作(C语言)
文件指针文件指针在 stdio.h中定义FILE *pf; 文件指针变量pf是指向FILE结构的指针变量,通过pf 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件, 实施对文件的操作。文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联...
2018-12-07 17:12:16
125
原创 对于C语言中自定义类型的部分理解(结构体)
结构体结构体:结构体是一些成员的集合,这些值被称为成员变量。常与typedef同用。每一个结构体都是一种类型。结构体中可以包含本身结构体指针,占4个字节。struct student{ int num; char name[20];};结构体的定义和初始化struct student p1 = { 5 , "Bob"};//struct student{ int n...
2018-11-18 19:55:58
221
原创 完全版 通讯录(保存文件)无限创建
话不多说看代码虽然部分实现并不是最优解,但我会继续学习完善。#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;//姓名、性别、年龄、电话、住址typedef struct Person_info{ char name[30]; int age; char sex[5];
2018-11-17 22:21:31
142
原创 通讯录(C语言)动态创建
动态创建 无限存(内存多大存多少)!实现通讯录以动态创建#include<stdio.h>#include<stdlib.h>#include<string.h>//姓名、性别、年龄、电话、住址typedef struct Person_info{ char name[30]; int age; char sex[5]; char num...
2018-11-15 22:42:23
174
原创 模拟实现qsort
定义头文件#ifndef _COMPARE_H__#define _CPMPARE_H__int intGreat(void *x, void *y){ return *(int *)x - *(int *)y;}int intLess(void *x, void *y){ return intGreat(y, x);}int charGreat(void *x, vo...
2018-11-15 22:36:21
165
原创 简单编写 通讯录(C语言)
通讯录利用结构体数组实现 固定容量的通讯录#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct Person_info{ char name[30]; char number[30];}Person_info;#define SIZE 1000typed...
2018-11-14 14:36:11
595
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人