自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。 注意: 因为管道是随进程的,进程结束管道生命周期也就结束,而对于消息队列来说,是随操作系统的,就算进程突出,不去手动的释放消

2017-06-07 18:01:44 409

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

共享内存共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度最快,只需要让两个进程通过页表映射到同一块物理内存即可,这样,这块物理内存是两个进程都能看到的,这样当一个进程进行写操作,另外的一个进程也就可以做读操作。所以问题关键也就是给出一个特定的存储区。通常情况下,我们需要确保一个进程在写的时候,另外一个进程不能去读,所以我们可以使用信号量进行共享内存访问。 创建共享

2017-06-07 12:58:53 295

原创 进程间通信---管道

管道管道是⼀一种最基本的 IPC机制,由pipe函数创建。#include<stdio.h>int pipe(int fileds[2])调用pipe函数时在内存中开辟一块缓冲区(就称为管道),用于通信,它有一个读端和一个写端,通过函数参数传给用户程序两个文件描述符,fileds[0]指向管道的读端,fileds[1]指向管道的写端。(方便记忆就可以理解为,标准输入0,标准输出1)看起来管道就像是

2017-06-03 22:57:45 240

原创 实现简单的shell

shell原理shell就是运用程序替换的原理进行实现的。 何为程序替换? 假如操作系统正在执行某一个程序,然后我们利用程序替换函数指定一个新的程序,让操作系统去执行我们新指定的程序。也就是这样一种情形下,我们fork一个进程,如果fork成功,子进程会和父进程执行相同的代码,而我们创建子进程是希望子进程执行指定的操作,所以需要执行exec族函数。 实现简单的shell实现步骤: 1

2017-05-23 16:04:31 353

原创 简析文件描述符(fd)和FILE结构体的关系

文件描述符(fd)文件描述符(file descriptor)用来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。通常情况下,将一个程序从硬盘加载到内存后,这个程序就化身为了一个进程,这时系统会默认打开三个文件: 标准输入(stdin)、标准输出(stdout)、标准错误(stderr)。这三个文件相对应的三个文

2017-05-11 09:28:59 621

原创 C++智能指针

RAII:RAII是一种规范,一种解决问题的思想。定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。 注意:RAII并不等同智能指针!智能指针是RAII的一种应用,智能指针是能够像指针一样智能的管理对象的释放问题。auto_ptr: (有缺陷)templete<classT>class AutoPtr{publi

2017-05-09 16:42:01 296

原创 僵尸进程与孤儿进程

僵尸进程在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程。 进程的危害 由于子进

2017-05-02 15:11:49 198

原创 C++模板

首先思考如何编写一个通用的加法函数? 你可能会想用函数重载或者用预处理程序,但他们都有缺点,所以这时候我们就需要使用泛型编程 泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段。模板是泛型编程的基础。 模板又分为函数模板和类模板。模板函数代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 模板是一个蓝图,它本身不是类或者函数,编译器用模板产

2017-04-27 13:15:05 341

原创 c++的多态

什么是多态?多态:一词最初来源于希腊语,意思是具有多种形式或形态的情形, 在C++语言中多态有着更广泛的含义这要先从对象类型说起 class Base {}; class Derived1 : public Base {}; class Derived2 : public Base {}; int main() { Derived1 pd1 = new

2017-04-20 16:23:33 261

原创 浅谈C++继承

说起C++,就一定会想到C++的三大特性,封装、继承和多态。那么这篇博客就来谈一谈这三大特性之一的继承。 1.继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持 原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设 计的层次结构,体现了由简单到复杂的认知过程。 继承的定义格式 2

2017-04-13 15:10:41 236

原创 Linux中task_struct结构体注释

进程控制块进程就是程序动态运行的实例,它是承担分配系统资源的实体。我们也可以把进程当成是由一组元素组成的实体,进程的两个基本的元素时程序代码和与代码相关联的数据集合。 task_struct是Linux内核的⼀一种数据结构,它会被装载到RAM⾥里并且包含着进程的信息。 每个进程都把它的信息放在 task_struct 这个数据结构⾥里,task_struct 包含了这些内容: 标识符

2017-04-10 18:05:34 426

原创 Linux实现简单的进度条

说起进度条,我们自然不陌生,在我们下载文件或者视频的时候,都会有进度条来提示我们下载的进度,所以今天我们就在Linux下实现一下简单的进度条的程序。1、回车换行 回车换行(\n):每次光标移到下一行的行首位置处; 换行(\r):每次光标移到本行的行首位置处 在输入\r,光标将移动到行首,输入\n光标换行并且移动到下一行行首,相当于\n\r。2、行缓冲区、fflush  缓冲区分为无缓冲、行缓

2017-04-06 18:24:05 272

原创 Linux中vim的配置

一、gcc /g++的安装 gcc以及g++是linux的编译器。 所以我们在学习使用Linux时首先需要安装gcc g++. 首先检查你的linux是否有gcc和g++,输入which gcc/g++,如果有就会显示路径,如果没有输入 yum install gcc 即可。 切换到超级用户,此时输入yum install gcc 此时输入which gcc已经会显示路径,表示安装已经完成

2017-04-06 16:33:10 283

原创 C语言--扫雷

test.c#include"game.h" int main(){ int input = 0; char mine[rows][cols]; char show[rows][cols]; int i = 0; int j = 0; for (i = 0; i < rows - 1; i++) { for (j = 0;

2017-03-30 18:21:59 198

原创 C语言--三子棋

test.c#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h> #include <time.h> #include "game.h"void game(){ char board[ROWS][COLS]; char ret = 0; init_board(boar

2017-03-30 18:19:40 204

原创 使用C语言模拟实现String函数

模拟实现strlen#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>int my_strlen(const char *str){ int count = 0; while (*str) { count++; str++; } r

2017-03-30 18:13:06 363

原创 C语言实现单链表

c语言实现单链表list.h#define _CRT_SECURE_NO_WARNINGS 1#ifndef __LIST_H__#define __LIST_H__#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DataType;typedef struct Node{ DataType d

2017-03-30 18:06:48 318

原创 C语言实现顺序表

用c语言实现顺序表#define _CRT_SECURE_NO_WARNINGS 1#include "SeqList.h"int InitSeqlist(pSeqlist plist){ assert(plist); memset(plist->data, 0, MAX_SIZE*sizeof(DataType)); plist->sz = 0;}//尾部插入

2017-03-30 18:04:29 346

原创 String类的深拷贝浅拷贝引用计数

在模拟实现String类的过程中,不可避免的会遇到深拷贝浅拷贝的问题,下面就深拷贝浅拷贝做一个简介。浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用同一块内存,当 一个对象将这块内存释放掉之后,另一些对象不知道该块空间已经还给了系统,以为还有效,所以在对这段内存进行操作的时候,发生了访问违规。深拷贝:深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象

2017-03-30 17:18:13 304

原创 Linux中find指令用法

find命令   功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。   语法:find 起始目录 寻找条件 操作   说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。   该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义

2017-03-27 16:58:18 432

原创 Linux中用stat命令查看文件时3个时间点解析

stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。语法stat(选项)(参数)参数文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。实例如图所示,会出现3个类型的时间,分别是Access,Modify,Change。下面我们就对这3个时间进行详细解释下。access time:表示我们最后一次访

2017-03-20 22:20:38 690

原创 c/c++注释转换

C语言与c++有着不同的注释方式,所以我进行了将c的注释转换成c++的注释CommentConvert.h文件#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_H__#define __COMMENT_H__#include <stdio.h>#include <stdlib.h>enum STATE{ NUL_STATE,

2017-03-14 14:30:58 318

原创 用C语言实现通讯录

实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人#define _CRT_SECURE_NO_WARNINGS 1#ifndef __CONTACT_H_#

2017-03-14 14:21:15 670

原创 this指针

在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。举一个简单的例子来说:a.volume函数要计算height*width*length的值,实际上是执行:(this->height)(this->width)(this->length) 由于当前this指向a,因此相当于执行(a.height)(

2017-03-14 14:02:03 264

空空如也

空空如也

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

TA关注的人

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