自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程间通信(IPC) --- 信号量

信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为 0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。Posix 信号量分为有名信号量和无名信号量(也叫基于内存的信号量)。 ...

2019-04-16 16:00:16 291

原创 进程间通信(IPC) --- 共享内存

关于共享内存,首先我们来看看它在地址空间里的位置: 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。共享内存的创建#include <sys/mman.h>#include <sys/stat.h> ...

2019-04-14 22:54:05 363

原创 进程间通信(IPC) --- 消息队列

消息队列是消息的链接表,存储在内核中,由消息队列标识符标识。有足够写权限的进程可往队列中放置消息,有足够读权限的进程可从队列中取走消息。POSIX 和 system V 下的消息队列略有不同,主要体现在一下几个方面:一般来说 POSIX 的接口要比 system V 的简单,但是system V 的可已移植性更好,几乎所有的 UNIX 系统都支持 对 POSIX 消息队列的读...

2019-04-09 00:00:05 242

原创 进程间通信(IPC) --- 管道

什么是管道? 管道是 UNIX系统中最古老的 IPC 形式,所有的 UNIX 系统都提供此种通信机制,我们把从一个进程连接到另一个进程的数据流称为一个 " 管道 "。管道有一下两种局限性:历史上,管道是半双工的(即数据只能在一个方向上流动)。现在,某些系统提供全双工管道,但是为了最佳的可移植性,我们绝不应预先嘉定系统支持全双工管道。 管道只能在具有公共祖先的两个进程之间使用...

2019-04-07 22:06:00 281

原创 vfork 和 exit

vfork 对于创建一个子进程,我们最常用的就是 fork,但其实 vfork 也是用来创建子进程的,但 vfork 和 fork 的差距却是非常大的。fork 的父子进程各自拥有独立的程序地址空间,在运行时互不干扰;而 vfork 父子进程共用一个程序地址空间,一个进程修改了内存中的内容,下一次另一个进程就会读到被修改的内容 vfork 保证子进程先执行,只有当子进程调用 ...

2019-04-06 18:02:09 421

原创 fork到底做了什么?

在 linux 中 fork 是一个非常重要的函数,它从一个已经存在的进程中创建出了一个新进程,这个新进程称为子进程,而原进程称为父进程。为什么 fork 函数看起来像是返回了两次? 对于很多初学者来说,这是最不能理解的。的确,这只能说是看起来像,因为从汇编的层面就已经决定了栈的压栈和出栈是成对出现的,一个函数永远只会返回一次。fork 函数的返回两次只是一个表面...

2019-04-06 00:39:24 1624

原创 进程概念

基本概念 首先,进程是什么?我们见过的最多的解释就是进程是程序的一个执行实例,正在执行的程序等。但从根本上来看,进程实际上就是正在运行的程序所对应的一套代码以及这个程序所拥有的资源。 对于操作系统来说,要管理一个对象,就要先对这个对象进行描述,再对这个对象进行组织。对于进程,就是用 PCB 来描述的。PCB(process control block)其实就是一个叫...

2019-04-05 15:07:47 193

原创 linux下的动态库和静态库

库是什么?库就是将代码打包成一个文件,供程序在编译或运行时去调用,并且库中不能包含 main 函数。静态库(.a) 静态库是程序在编译链接的时候就把库中的代码链接到可执行文件中,程序执行的时候将不再需要静态库。静态库的创建// add.h#pragma onceint add(int a, int b);// add.c#include "a...

2019-03-31 17:24:36 161

原创 文件系统

文件系统 当我们在linux下使用 ls -l 命令时,除了文件名,还能看到文件的其他信息 这些信息称为文件的元信息,是唯一表示这个文件的信息,它们分别是:文件的权限,硬链接数,文件所有者,文件所有者的所属组,文件的大小,最后修改日期以及文件名。 下面我们来看看linux下文件在磁盘中是如何存储的。 在linux下,文件的元信...

2019-03-31 11:36:27 277

原创 基础IO

在学C语言时期,当我们需要对文件进行操作时,使用的是 fopen、fclose、fwrite、fread 等库函数,而这些库函数实际上是对于系统调用接口进行了一层封装,更方便我们的使用。在了解这些系统调用接口之前,我们先来认识一下这两个概念:系统调用 和 库函数。 上面的 fopen fclose fwrite fread 等都是C语言标准库当中的函数,我们称之...

2019-03-30 21:27:53 282

原创 深度理解KMP算法

       KMP算法是一种改进的字符串匹配算法,KMP算法的关键是匹配即使发生失败,主串也不回退,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。       这是KMP的一般定义,但是实际我们对于KMP算法的实现总是有许多的不解,即使记下了它的实现过程,也还是不理解,这种没有基于理解的死...

2018-12-02 20:58:21 533 3

原创 实现一个简单的日期类

此篇博客实现了一个简单的日期类,不做过多说明。首先是类的声明:#pragma once class Date{public: //构造函数 Date(int year = 1900, int month = 1, int day = 1); //拷贝构造函数 Date(const Date&amp; d); //赋值运算符重载 Date&amp; operator=(...

2018-11-23 17:03:05 336

原创 初识C++

       大二在学校时,学校就开设了C++这门课程,但是我并没有认真的去学习。最近重新翻开了C++的课本,才发现了C++的奇妙之处,想在此将我的学习历程记录下来。       首先我们要明白什么是C++,C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。      在这里我们先不谈抽象数据类...

2018-11-23 16:49:38 274

原创 数据结构—— 七大排序算法总结

排序是数据结构最重要的算法之一,在这里整理一下七大排序算法的思路及代码。排序分为以下四类共七种排序方法:插入排序:1) 直接插入排序 2) 希尔排序选择排序:3) 直接选择排序 4) 堆排序交换排序:5) 冒泡排序 6) 快速排序合并排序:7) 合并排序(注:本文中讲解均以升序为例)1、直接插入排序 直接插入排序是最...

2018-11-03 19:19:09 3808 1

原创 单链表常见面试题

数据结构和算法,是我们程序设计最重要的两大元素,可以说,我们的编程,都是在选择和设计合适的数据结构来存放数据,然后再用合适的算法来处理这些数据。 在面试中,最经常被提及的就是链表,因为它简单,但又因为需要对指针进行操作,凡是涉及到指针的,都需要我们具有良好的编程基础才能确保代码没有任何错误。链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长...

2018-07-09 22:02:03 5619 4

空空如也

空空如也

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

TA关注的人

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