![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
总结
文章平均质量分 68
316llp
这个作者很懒,什么都没留下…
展开
-
linux 中Access,Modify,Change三个时间的区别
linux 中Access,Modify,Change三个时间的区别Access指最后一次读取的时间;Modify指最后一次修改数据的时间;Change指最后一次修改元数据的时间;Modify和Change的主要区别在于对文件修改的部分不同,Modify指修改文件的内容,即文件的写操作,而Change是修改文件的元数据,即用来描述数据的数据,更通俗的说就是数据的属性。原创 2017-03-18 16:09:20 · 907 阅读 · 0 评论 -
C++中的对象模型
多态,即度“多种形态“。C++中虚函数的主要作用就是实现多态。简单地说原创 2017-05-07 11:27:39 · 168 阅读 · 0 评论 -
栈&队列&栈帧&递归
*栈的定义——Stack栈是只允许在末端进行插入和删除的线性表,栈具有后进先出的特征(LIFO,Last In First Out). *栈的应用栈很大意义上模拟了压栈,实现了递归转非递归。还有算术表达式求值,波兰表达式(后缀表达式),迷宫问题等。 *队列的定义队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性(FIFO,First原创 2017-05-07 11:47:49 · 443 阅读 · 0 评论 -
进程通信之管道
在谈管道之前我们先了解一下什么是进程间通信。 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示原创 2017-05-19 18:06:10 · 196 阅读 · 0 评论 -
生产者消费者模型
生产者消费者模型: 两个进程共享一个缓冲区,一个进程称为生产者,它向缓冲区里放数据,另一个进程称为消费者,他向缓冲区里取数据,当生产者向缓冲区里放数据是就必须进入挂起状态,知道消费者从缓冲区中取走数据后生产者才能继续向缓冲区里放数据,同样当缓冲区中没有数据时,消费者进程就必须进入挂起休眠状态,直到生产者向缓冲区中放入数据时,消费者才能唤醒继续从缓冲区中取数原创 2017-06-15 17:44:27 · 403 阅读 · 0 评论 -
对比线程安全和可重入函数
一、什么是线程安全 一个函数被称为线程安全,当且仅当它被多个并发的进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就称它是不安全的。 线程安全主要是针对数据竞争来说的,就是说,如果数据不需要共享,那就让每个数据私有,如果需要共享,就得加锁原创 2017-06-09 22:04:57 · 161 阅读 · 0 评论 -
使用gdb调试多进程多线程程序
一、gdb基础知识1、gdb是Linux环境下的一种调试工具,使用时在源程序生成是加上-g选项。2、开始使用:gdb binFile;退出使用:cttl+d或quit。3、调试过程中常用的命令有:(1)list命令 list linenum 显示程序第linenum行周围的程序 list funct原创 2017-06-11 19:47:47 · 303 阅读 · 0 评论 -
判断元素出栈入栈顺序的合法性
思路:假设入栈序列{1,2,3,4,5},出栈序列{4,5,3,2,1};首先我们将入栈序列的第一个元素入栈,这是设置一个指针只想出栈序列的第一个元素,如果出入栈以后,栈顶元素和出栈指针所指向的元素相等,那么就让栈顶元素出栈,让指针++,最后判断栈为空就好,若为空,就说明是合法的,如果不是就是不合法。 代码如下:#include#include#includeusing原创 2017-07-21 15:55:49 · 566 阅读 · 0 评论 -
STL之Vector实现原理
Vector的基本知识 在C++中,我们使用信息隐藏技术和封装技术把数据隐藏在类内部不许外部直接操作,同时提供访问器(如get_xxx成员函数)和修改器(如set_xxx成员函数)。STL容器的设计原理如出一辙,只是它们在实现时考虑的问题更多,更加复杂而已。容器不仅把元素对象隐藏起来了,而且把元素对象的内存申请和释放操作也全部隐藏起来了(通过存储分配器),这就使程序员彻底摆脱了直原创 2017-08-01 23:24:31 · 8237 阅读 · 3 评论 -
Linux中exit()函数和atexit函数
main函数当内核使用一个exec函数执行C程序时,在调用main函数之前先调用一个特殊的启动例程,可执行程序将此例程指定为起始地址。启动例程从内核获取命令行参数和环境变量,然后为调用main函数做好准备。进程终止进程终止的方式有8种,前5种为正常终止,后3种为异常终止:1.从main函数返回;2.调用exit函数;3.调用_exit或_Exit;4.最后一个线程从启动原创 2017-04-23 14:03:16 · 527 阅读 · 0 评论 -
二叉树
在介绍二叉树之前大家一定要对树有一定的了解,二叉树是一种特殊的树结构,二叉树每个节点最多有两个孩子节点,分别为左孩子和右孩子。 *满二叉树:高度为N的满二叉树有2^n-1个节点的二叉树。 *完全二叉树:若设二叉树的深度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大个数,第h层所有的节点都连续集中在最左边,这就是完全二叉树。*链表存储表示 根据二叉树定义原创 2017-05-07 13:43:31 · 192 阅读 · 0 评论 -
Linux进程描述
广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。进程控制块每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是tack_struct.结构体。下面我们将全面了解一下其中都有那些信息。在Linux中,这个结构叫做task_struct.task_struct是Linux内核的一种数据结构,他会被装载到PA原创 2017-04-22 19:45:04 · 331 阅读 · 0 评论 -
linux中进入一个目录需要什么权限,在目录下创建文件需要什么权限
linux中进入一个目录需要什么权限,在目录下创建文件需要什么权限1.在目录下创建文件需要的权限:首先在普通用户下创建一个code目录,并且取消他们的所有权限:chmod 000 code此时我们要进入code目录时,会发现系统提示权限不够然后当我们赋予目录code对拥有者的读权限操作此时当我们进入目录code时依然目录不够当我们赋予code目录对拥有者的写原创 2017-03-18 22:27:46 · 1536 阅读 · 0 评论 -
C/C++动态内存管理
C语言动态内存管理C语言使用malloc/calloc/realloc/free 进行动态内存管理1.malloc/calloc/realloc的区别:三个函数的的声明是:void *malloc(unsigned size);void *calloc(size_t numEles,size_t sizeofEle);void *realloc(void *ptr,uns原创 2017-03-15 20:56:20 · 322 阅读 · 0 评论 -
Linux下的粘滞位权限
粘滞位权限原创 2017-03-29 18:33:22 · 357 阅读 · 0 评论 -
vim的简单配置
在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而我们Linux自带的vim配置相对计较简陋,所以在每个用户得住目录下,都可以自己建立私有的配置文件,命名为:".vimrc“文件。#cd ~/ //进入当前用户的主目录如果你觉得不需要很多的功能的话,把下面这些简单的配置贴进创建的.vimrc文件即可:#vim .vimrc //进入.原创 2017-03-29 18:36:20 · 240 阅读 · 0 评论 -
Linux中的find指令
Linux下的find命令在目录结构中搜索文件,并执行指定的操作。Linux下的find命令提供了相当多的查找条件,条件很强大。find具有强大的功能,所以他的选项也很多,计时系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只要具有相应的权限。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放到后台执行,因为遍历一个大的文件系统肯能会花费很长的时间(这里是指原创 2017-03-25 21:04:35 · 496 阅读 · 0 评论 -
浅析智能指针
1、什么是智能指针所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。2、为什么需要智能指针代码中经常会忘记释放动态开辟的资源,这样就不知不觉的造成内存泄漏3、什么是RAII技术 RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源的简单计数。它定义了一个类来封装资源的分配和释放,在构原创 2017-04-16 13:42:55 · 221 阅读 · 0 评论 -
进程的状态
为了弄清楚正在运行的进程是什么意思,我们需要知道进程的不同的状态。一个进程可以有·7个状态(在Linux内核中,进程有时也叫作任务)。下面的状态在fs/proc/array.c文件中定义:static const char *cionst task_atate_array[]={"R(running)","S(sleeping)","D(disk sleep)","T(stopped)",原创 2017-04-15 21:37:19 · 250 阅读 · 0 评论 -
僵尸进程和孤儿进程
当进程创建时他会被载进虚拟内存,为程序变量分配空间,并把相关信息添到task_struck里。进程内存分布分为4个不同的阶段:1、文本段,包含程序的源指令。2、数据段,包含了静态变量。3、堆、动态内存分区区域。4、栈、动态增长与收缩的段,保存本地变量。 这里有两种创建进程的方法、fork()和execve()。它们都是系统调用,但他们的运行方式有点不同。要创建原创 2017-04-15 22:21:18 · 299 阅读 · 0 评论 -
C++异常
对于每位编程人员来说,程序的编译或运行错误是很常见的,今天我在这里粗略的总结一下C++中的异常1、错误处理技术:传统的错误处理办法:(1)终止程序(如段错误等)(2)返回错误码(3)返回和法值,让程序出于某种非法的状态。(太坑了)(4)调用一个预先设置的出现错误是调用的函数。——回调函数2、异常的处理当一个函数发现自己无法处理的错误是抛出异常,让函数的调用者直接或间原创 2017-04-19 13:45:55 · 235 阅读 · 0 评论 -
实现一个线程安全的单例模式
一、单例模式 单例模式也叫单件模式。Singleton是一个非常常用的设计模式,几乎所有稍微大一些的程序都会使用它,所以构建一个高效的Singleton很重要。1、单例类保证全局只有一个唯一实例对象2、单例类提供获取这个唯一实例的接口。 我们都能想到一个简单的单例模式该怎样实现:构造函数声明为private或protec防止被外部函数实例化,内部保存一个p原创 2017-08-02 22:28:09 · 6390 阅读 · 0 评论