- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 进程通信--总结
关于进程通信,我整理了一下自己所总结的几篇文章以供以后复习查阅。进程通信的一些基本概念:进程通信概念和进程通信方式进程通信的几种方式:信号量:信号量(生产者和消费者模型) 和 信号量(进程通信)共享内存: 共享内存(进程通信)消息队列: 进程通信之消息队列管道:进程通信之管道(PIPE)
2017-05-20 17:37:56 1096
原创 逆时针填充正方形(递归 循环)
如果所示,逆时针填充正方形,从1,2,3…到16,输入一个正方形的大小,填充。 比如输入4,正方形如上图,如果输入5,则是1,2,3…到25。这道题,可以按照如图所示的方法,先构造最外一圈的数,123一组,456一组,789一组,101112一组,只需要注意到下标的变化,数字的更新即可。对于里面矩阵可以采用递归的写法。void FillTheRectangle_1(vector<vector<in
2017-05-25 17:12:15 913
原创 利用可变参数模拟实现简易printf
printf一般是这么使用的, printf (“Characters: %c %c \n”, ‘a’, 65); 它是可变参数,遇到%s,%c,%d就格式化输出 因为我们重点是了解学习可变参数,因此,我们简化一下,遇到c,s,d就格式化输出 当然也许你会说那么想输出c字符咋办?其实不难,只要扫描的时候向printf学习用%c输出,c直接输出,只不过我们重点不在这个扫描字符串分析,
2017-05-24 21:22:37 344
原创 C++中文件读取处理(按行或者单词)
前段时间参加蓝桥杯,遇到一些题目,题目本身不难,按照常规思路写代码即可,但是我忘了如何读取文件了。。。面对一堆数据楞是写不出。还有几天是蓝桥杯的决赛,所以为了避免踩同样的坑,我打算通过实例复习下文件读写。文件读写需要引fstream,如果对fstream不了解的话,可以查一查官方的文档cplusplus这个网站。一般常用的函数就是open,close,getline…具体的函数不会了直接查一下,学会
2017-05-22 17:46:14 14579
原创 共享内存(进程通信)
前面介绍了进程通信的几种方式,信号量,管道,消息队列,今天主要总结下共享内存的知识点。什么是共享内存我们一张图来解释什么叫共享内存。我们知道,每个进程都有一个叫PCB(Linux下一般为task _ struct)的数据结构,用于保存进程的相关信息。我们可以通过PCB找到进程地址空间,进程地址空间一般包括栈,堆,数据段,代码段等等,需要明确的一点就是用户访问的都是虚拟内存,操作系统是通过页表+MMU
2017-05-20 17:26:35 7878 5
原创 信号量(进程通信)
关于进程通信方式,我之前整理如上图。今天,我们主要通过实例(代码编写)来深入了解信号量。关于信号的概念,基础知识等我在信号量(生产者和消费者模型)以及进程通信概念和进程通信方式这两篇文章都有总结,不再赘述。我们通过了解Linux下关于信号量函数接口,以及代码编写复习,熟悉信号量。PS:代码均在Ubuntu16.04下测试。什么是信号量在前面,我们提过,信号量主要用于互斥或者同步机制。信号量本质上是一
2017-05-20 10:21:01 1207 1
原创 进程通信之消息队列
在前面,我们了解进程通信的概念以及常见的进程通信方式,我做个整理如下图:我们继续通过实例来学习进程通信,今天主要是讲消息队列是如何实现进程通信的,代码均在Ubuntu16.04下测试。如上图所示,消息队列是一种间接的通信方式,它提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同
2017-05-17 10:19:09 945
原创 进程通信之管道(PIPE)
在前面进程通信概念和进程通信方式,我们了解了进程通信的简单概念以及4种进程通信的方式,今天我们将要通过具体实例来学习,理解进程通信方式中的管道(PIPE)。本文所有代码都在Ubuntu16.04测试。我们在前面已经了解了常用的进程间通信方式,它们大致可以以如下方式分类:A. 传统的进程间通信方式 无名管道(pipe)、有名管道(fifo)和信号(signal)B. System v IPC对象
2017-05-15 17:03:51 3273
原创 LCS,最长公共子序列
一个字符串S,去掉零个或者多个元素所剩下的子串称为S的子序列。最长公共子序列就是寻找两个给定序列的子序列,该子序列在两个序列中以相同的顺序出现,但是不必要是连续的。例如序列X=ABCBDAB,Y=BDCABA。序列BCA是X和Y的一个公共子序列,但是不是X和Y的最长公共子序列,子序列BCBA是X和Y的一个LCS,序列BDAB也是。暴力解法寻找LCS的一种方法是枚举X所有的子序列,然后注意检查是否是Y
2017-05-11 18:32:25 346
原创 动态规划 钢条切割
这是算法导论动态规划的一个例子,自己实现了一下~给定一个长度为n英寸的钢条和一个价格表Pi(i=1,2…n),求切割钢条方案,使得销售收益Rn最大。注意,如果长度为n的钢条价格Pn足够大,则最优解可能就不需要切割。分析:代码如下:#include<iostream>#include<vector>#include<algorithm>using namespace std;//recursio
2017-05-11 17:02:39 396
原创 实现一个简单shell(支持重定向)
5.16更新:支持重定向我们知道对于Linux,shell就是个命令行解释器,当我们输入相关的命令,会去执行相关的操作。比如当我们输入ls -a -l命令,shell就会打印出当前目录的内容,这是如何实现的?shell自己就是一个进程,当我们输入ls之类的命令,它会通过fork,exec函数去创建一个新的子进程去执行相关操作。因此我们也可以利用这个来实现一个简单的shell。当然,这个shell足够
2017-05-10 22:55:37 7525 2
转载 了解栈帧
一、 什么是栈帧? 什么是栈帧,相信很多从事C编程的童鞋还是没有搞明白,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...二、 栈(用户
2017-05-08 20:28:47 362
原创 进程通信概念和进程通信方式
进程通信(IPC,Inter-Porcess Communcation)是进程进行通信和同步的机制。IPC提供两个基本操作:发送(send message)接收(receive message)进程通信流程:在通信进程之间建立通信链路通过send/receive交换信息进程通信方式: 直接通信: 进程必须正确命名对方,比如send(p,message)向p发送信息,receiv
2017-05-08 19:11:01 11639 2
原创 死锁,银行家算法
死锁:由于竞争资源和通信关系,两个或者更多线程在执行中出现,永远相互等待只能由其他进程引发的事件我们知道操作系统中很多种资源,如CPU,内存,IO设备等,每种资源又有很多实例,对于这些资源,进程该如何访问?请求/获取:申请空闲资源使用/占用:进程占用资源释放:资源状态由占用变为空闲为了更好的了解死锁,我们将资源分类:造成死锁必须要满足以下条件: 如果在系统中已经出现死锁后,应该及时检测到死锁
2017-05-08 17:05:23 962
原创 仿函数(functors)使用
我们都知道C++有一个标准库STL,熟练使用STL可以提高我们开发的效率。可能很多人都熟悉诸如vector,list,map等容器,但是作为STL六大组件的仿函数则不太了解,或许有人说,这是个什么东西?学了有什么好处?仿函数,它行为类似函数,可以作为算法的某种策略,帮助我们更好的使用算法。我们简单看一个例子://排序一组数据#include <iostream>#include <vector>
2017-05-07 15:04:15 897
原创 C语言的存储空间布局
正文段:CPU执行的机器指令部分,通常,正文段可共享,而且是只读的,以防止程序由于意外而修改其自身的指令。初始化数据段:通常将此段称为数据段,它包含了程序中需要明确赋初值的变量,比如,C语言在函数外的声明:int max = 100;也就是全局变量,静态全局变量带初值存放在初始化数据段非初始化数据段:通常将此段成为bss段,bss来自早期的汇编运算符,意思是“block started by sym
2017-05-03 21:08:38 673
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人