自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程间通信方式(四):System V 信号量

一、概念二、特点三、信号量数据结构        信号量具有自身特有的数据结构 semid_ds,该结构说明了信号量的一些状态信息等等,详细信息可参阅文件 /usr/include/linux/sem.h 。四、信号量相关函数1. semget【头文件】:#include <sys/ipc.h>、#include <sys/...

2019-10-24 23:16:34 492 1

原创 进程间通信方式(三):System V 共享内存

一、概念        我们都知道,在 Linux 中,每个进程都有属于自己的虚拟地址空间,并且还有一个与之对应的页表,负责将进程的虚拟地址与物理地址进行映射。倘若现在有两个不同的进程,它们各自的虚拟地址通过页表映射到了同一块物理空间,那么这块物理空间就叫做共享内存。        所以说,共享内存就是允许两个或...

2019-09-07 21:14:06 434

原创 详解:ipcs 和 ipcrm 命令

1. ipcs【功能】:查看一些进程间通信方式(消息队列、共享内存、信号量)的信息【选项】:选项说明2. ipcrm【功能】:【选项】:选项说明...

2019-09-06 17:40:07 472

原创 进程间通信方式(二):System V 消息队列

一、概念        消息队列又叫做报文队列,可以认为它就是一个消息链表,链表中的每一个消息都看作是一个记录,具有特定的格式以及特定的优先级。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,并且每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据块。        对消息队列有写...

2019-09-06 11:40:11 483

原创 详解:指针、数组和函数的嵌套问题

在学习C语言的过程中,我们经常会遇到一些数组和指针嵌套的问题,为了解决这些问题,我们首先要明确指针和数组之间是否有什么关系? 强调:两者没有关系,指针是指针,数字是数组。一、指针数组 表达式:int *p[5]; 说明:因为 [ ] 比 * 的优先级高,所以p首先与 [ ] 结合成为一个数组,再与 * 结合成为一个指针数组,数组的每一个元素都是一个指针(int * 类型)。 图解: ...

2019-09-03 20:45:01 3416

原创 总结:八大排序算法(图解+代码)

一、直接插入排序基本思想: &amp;amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;amp;nbsp;把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过

2019-08-16 23:52:12 989

原创 详解:命名管道的打开规则

一、如果当前打开操作是为读而打开 FIFO 时1. 阻塞模式(默认)【示例】:【代码】:【执行结果】:【分析】:2. 非阻塞模式【示例】:【代码】:【执行结果】:【分析】:3. 总结模式结果阻塞模式(O_NONBLOCK disable)阻塞直到有相关进程为写而打开该 FIFO非阻塞模式(O_NONBLOCK enable)立刻返回成功二...

2019-08-13 20:22:27 1881 1

原创 详解:管道的读写规则以及原子性问题

当管道空的时候O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来为止(默认)O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN【示例】:#include <stdio.h> ...

2019-08-13 20:19:14 2629 7

原创 进程间通信方式(一):管道

前言        每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。一、概念        管道是 Unix 中最古老...

2019-08-13 20:13:19 673

原创 辨析:硬链接与符号链接

前言        我们都知道,在 Linux 文件系统中,每个文件都仅会占用一个 inode,文件的实际内容由 inode 的记录来指向。若想要读取该文件,则必须经过目录记录的文件名来找到对应的 inode 节点号。也就是说,文件名只与目录有关,而 inode 却与文件内容有关。所以可以认为,inode 才是文件的唯一标识而非文件名。一、硬链接(Har...

2019-07-27 11:56:16 1358

原创 Linux文件系统基础认识

一、概述      Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。      常见的文件系统类型有ext2、ext3、ext4、XFS和BTRFS,其中ext2为Linux的正统文件系统。二、文件系统存储结...

2019-07-26 11:49:20 303

原创 总结:C标准库I/O函数

一、函数列表函数名详细信息clearerr()点击查看*fclose点击查看*fdopen()点击查看feof()点击查看*ferror()点击查看*fflush()点击查看*fgetc()点击查看*fgetpos()点击查看*fgets()点击查看*fileno()点击查看flockfile()...

2019-05-25 17:48:06 1141

原创 详解:进程控制那些事儿

一、进程创建1. fork头文件:#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;unistd.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;函数原型:pid_t fork(void);说明:返回值:fork:父子进程分别有自己独立的地址空间,父子进程代码共享,数据独有子进程返回0,父进程返回的是子进程的PID反过来:子进程返回父进程的PID,父进程返回0,这是错误的从接口说起,

2018-11-29 00:40:57 274

原创 辨析:僵尸进程与孤儿进程

一、僵尸进程1. 概念&nbsp; &nbsp; &nbsp;处于僵尸状态的进程就是一个僵尸进程2. 产生原因&nbsp; &nbsp; &nbsp;子进程先于父进程退出;&nbsp; &nbsp; &nbsp;子进程退出为了保存自己的退出状态,因此退出后资源不会被完全释放。正常情况下,当操作系统检测到了子进程要退出时,会通过 SIGCHLD 信号通知父进程,让父进程去获取子进程的退...

2018-11-20 23:23:55 418

原创 解析环境变量

一、概念&amp;nbsp; &amp;nbsp; &amp;nbsp;一般是指在操作系统中用来指定操作系统运行环境的一些参数。它具有某些特殊用途,在操作系统中通常具有全局属性,并且可以被子进程继承下去。二、常见环境变量环境变量名称含义PATH指定命令的搜索路径HOME指定用户的主工作目录(即用户登录到Linux系统中时,默认的目录)HISTSIZE保存历史命令记录的条数...

2018-11-20 22:53:33 266

原创 进程的全面解析

一、进程概念狭义定义在生活中,当我们打开某个软件的时候,其实就是将这个程序运行起来,这些程序运行起来都需要被加载到内存中去,而这每一个运行起来的程序就是一个进程,所以说进程是正在运行的程序的实例。广义定义进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统进行资源分配和调度的基本单位,是操作系统结构的基础。PCB(进程控制块)在操作系统中,进程的描述信息被放在一个...

2018-11-20 21:52:15 617

原创 入门:Makefile 基础理解

一、基本介绍在一些大型工程中,包含有许许多多的源文件,它们按照类型、功能、模块等分别放在若干个目录中,如果我们一个一个的手动去编译执行它们,这将会耗费大量的精力,这样的工作量我们是无法想象的。为了解决这样的问题,我们需要借助 makefile 来进行自动编译,那么什么是 makefile 呢?makefile 其实就是一个文件,在它的里面定义了一系列的规则,用来指定哪些文件需要先编译,哪些文件...

2018-10-31 21:28:00 778

原创 Linux工具之调试器gdb

一、介绍GDB是一个在UNIX/LINUX操作系统下基于命令行的且功能强大的程序调试工具,由GNU开源组织发布。二、基本用法1.如何进入调试?(1)要使用gdb调试,我们必须首先在源代码生成二进制程序的时候,加上 -g 选项,从而生成调试信息;例如:gcc -g test.c -o test(2)接着可以使用gdb指令进入调试界面//方法一: gdb test//方法二: g...

2018-10-19 17:47:22 311

原创 Linux工具之编译器gcc

一、介绍GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言,后来经过不断扩展能够支持更多的编程语言,...

2018-10-06 11:51:20 580

原创 Linux工具之编辑器vim

一、vim1、介绍:Vim是一个高度可配置的文本编辑器,可以实现高效的文本编辑。它是与大多数UNIX系统一起分发的vi编辑器的改进版本。

2018-10-05 19:36:42 256

原创 总结:Linux常用基础命令

1、ls语法:ls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件;对于文件,将列出文件名以及其他信息选项列表:-a:列出目录下的所有文件,包括以 . 开头的隐藏文件-l:列出文件的详细信息-d:仅列出目录本身,而不是列出目录的文件数据-h:将文件容量以较易读的方式(GB,KB等)列出来-R:列出所有子目录下的文件(递归)-t:按时间进行排序-s...

2018-09-25 17:09:01 249

原创 海量数据处理方法及应用

一、哈希切割top K问题给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? (1)首先使用散列函数HashFunc(ip)将每一个IP地址转化为整型,再通过HashFunc(ip)%1000使得每一个IP各自进入到所切分的1000个小文件中,余数是多少就映射到多少号文件中,这样做能证相同IP进入到同一文件中; (2)接着在每一个小文...

2018-05-24 22:22:58 436

原创 哈希扩展——布隆过滤器

一、基本原理:&nbsp; &nbsp; &nbsp;对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,但是这个过程并不能保证查找的结果是100%正确的。二、要点:删除 &nbsp; &nbsp; &nbsp;不支持删除一个已经插入的关键字,因为该关键字对应的位可能会牵动到其他的关键字。所以...

2018-05-17 18:32:44 250

原创 哈希变形——位图

一、介绍:位图就是用一个bit位表示一个数的存放状态,适用于处理海量数据,可以大幅度减少空间。二、图解三、代码实现BitMap.h#ifndef __BITMAP_H__#define __BITMAP_H__#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;assert.h&amp;gt;...

2018-05-17 17:41:45 270

原创 中英互译词典(二叉搜索树)

一、BSTree.h#ifndef __BSTREE_H__#define __BSTREE_H__#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#include &lt;string.h&gt;typedef char* KeyType;typedef char* Va...

2018-05-12 22:50:25 779

原创 哈希表——拉链法

一、Hash.h#ifndef __HASH_H__#define __HASH_H__#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;assert.h&amp;amp;amp;gt;typedef int KeyType;typedef s

2018-05-12 18:16:08 467

原创 哈希表——开放定址法

一、Hash.h#ifndef __HASH_H__#define __HASH_H__#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;assert.h&amp;gt;typedef int HashDataType;typedef enum Status{ EMPTY, EXITS,...

2018-05-12 11:43:32 435

原创 迷宫问题(回溯法)

一、Maze.h#ifndef __Maze_h__#define __Maze_h__#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <Windows.h>#define N 6#define Initsize 5 //初始存储空间#define Increment 2 //每次增量typedef str

2018-05-08 21:53:20 321

原创 游戏:贪吃蛇

一、Game.h#ifndef __GAME_H__#define __GAME_H__#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;time.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;windows.h&amp;gt;//蛇移动区域#define gamewidth 25#define gameh

2018-05-06 18:18:46 204

原创 二叉搜索树

一、BSTree.h#ifndef __BSTREE_H__#define __BSTREE_H__#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;typedef int DataType;typedef struct BSTreeNode{ struct BST...

2018-05-05 23:43:06 134

原创 注释风格转换

一、注释风格 (1)C语言注释风格:/* …… */ (2)C++注释风格: // …… 例如:/*int a = 0;*///int b = 0;二、图解 分析: 1、C++注释风格: (1)如果遇到第一个’/’,进入found_slash,否则normal自身循环,直到遇到第一个’/’; (2)进入found_slash后,若紧接着遇到第二个’/’,说明是C+...

2018-04-26 23:23:39 204

原创 代码实现:大顶堆

一、Heap.h#ifndef __HEAP_H__#define __HEAP_H__#include <stdio.h>#include <assert.h>#include <string.h>#include <windows.h>typedef int HeapDateType;typedef struct Heap{ HeapDateType* _a; size

2018-04-26 10:01:31 2336

原创 解析二叉树相关面试题

一、BTree.h#ifndef __BTree_h__#define __BTree_h__#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;assert.h&amp;gt;#include &amp;lt;Windows.h&amp;gt;typedef int BTDataType;typedef

2018-04-25 17:50:21 225

原创 通讯录(动态)

#define _CRT_SECURE_NO_WARNINGS 1#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;Windows.h&gt;#define First_Cap 3 //默认存储大小#define Add_Cap 2 //每次增容大小#define Max_Cap 1...

2018-04-14 23:24:45 180

原创 通讯录(静态)

#define _CRT_SECURE_NO_WARNINGS 1#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;Windows.h&gt;#define People_Max 1000 // 通讯录人数上限typedef struct Information // 联系人信息{ char ...

2018-04-14 23:14:16 245

原创 解析栈和队列面试题

一、实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1)思路: 1、首先定义两个栈(s,min),栈s存放数据,栈min存放当前所有数据的最小值 2、对于栈s正常入栈,出栈就可以 3、对于栈min,当栈min为空或者入栈的数据x小于等于栈min栈顶元素的值就将x入栈;当栈s栈顶元素的值等于栈min栈顶元素的值,栈min进行出栈操作 4、取栈m...

2018-04-14 22:26:35 305

原创 逆波兰表达式

一、RPN.h#ifndef __RPN_h__#define __RPN_h__#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#include &lt;Windows.h&gt; #define Initsize 5 //初始存储空间#define Increment 2 ...

2018-04-07 10:49:26 187

原创 双链表

一、DList.h#ifndef __DList_h__#define __DList_h__#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;assert.h&amp;gt;#include &amp;lt;Windows.h&amp;gt;typedef int DataType;typedef st

2018-04-01 23:08:07 118

原创 单链队列

一、Queue.h#ifndef __Queue_h__#define __Queue_h__#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#include &lt;Windows.h&gt;typedef int DataType;typedef struct Que...

2018-03-31 22:22:24 194

原创 顺序栈

一、stack.h#ifndef __stack_h__#define __stack_h__#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;assert.h&gt;#include &lt;Windows.h&gt;#define Initsize 5 //初始存储空间#define Increme...

2018-03-31 22:18:36 147

空空如也

空空如也

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

TA关注的人

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