- 博客(21)
- 收藏
- 关注
原创 信号
信号什么是信号?我们可以从实际生活中来解释信号,像红绿灯就是一个信号,我们可以通过它发出的哪个信号去做相对应的事情。比如我们可以写一个简单的死循环程序:运行时我们按下ctrl+c就可以中断这个死循环程序。我们可以将ctrl+c解释成一个SIGINT信号,可以说给这个进程发送了一个SIGINT信号使这个进程结束。我们可以用kill -l查看系统定义的信号列表:可以看到一共有62种信号,1-31 是普...
2018-04-06 19:55:58 324
原创 软链接与硬链接,动态库与静态库
首先我们了解一个概念 文件系统:我们使用ls -l的时候除了看到文件名,还看到了文件元数据:可以看到每行包含七列,分别为:模式,硬链接数,文件所有者,组,大小,最后修改时间,文件名。ls -l读取存储在磁盘上的文件信息,然后显示出来。还可以用stat命令查看某个文件的具体信息:上面结果中有一个inode很重要,我们分析一下它,先看文件系统:这就是文件系统的图示,其中超级块存放文件系统本身的结构信息...
2018-04-02 21:54:11 991
原创 Linux 文件描述符详解
要了解Linux下的文件IO,我们首先要清楚文件描述符的概念,那什么是文件描述符呢?接下来我们一起认识一下: 首先我们知道操作系统是一个“纯正”的搞管理的软件,它对硬件的管理方式是先描述起来,再组织起来;同样,当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件,这个数据结构就是file结构体,保存了文件相关的信息,表示一个已经打开的文件对象。几种文件相关系统调用接口的详解在...
2018-03-29 17:31:37 5823 1
原创 进程间通信之信号量
信号量前面我们解析了进程间通信的管道、消息队列以及共享内存,今天我们看看最后一种方式:信号量。为了获得共享资源,进程需要执行下列操作:(1)测试控制该资源的信号量;(2)若此信号量的值为正,则进程可以使用该资源。进程会将信号量值减1,表示它使用了一个资源单位。(3)若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0。进程被唤醒后,它返回至步骤(1)。当进程不再使用由一个信号量控制的共享资源...
2018-03-23 20:09:18 393 1
原创 进程间通信之消息队列和共享内存
消息队列之前我们解析了一下进程间通信的管道通信,今天我们来看一下另外俩种通信方式:消息队列和共享内存。那什么是消息队列呢?之前我们说管道在进程间通信的时候是基于字节流的,而消息队列在进程间通信的时候是基于数据块的,并且是有类型的数据块。消息队列提供了一个从一个进程向另外一个进程发送一个有不同类型值的数据块的方法。每个消息队列都有一个msqid_ds 结构与其相关联,在/usr/include/li...
2018-03-23 12:14:04 2351
原创 进程间通信之管道
什么是进程间通信?字面意思就是让俩个进程之间可以互相传递信息,本质就是让俩个毫不相干的进程看到同一份资源。进程间通信的目的: 数据传输:一个进程需要将它的数据发送给另一个进程。 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时...
2018-03-22 18:11:15 307
原创 二叉搜索树
二叉搜索树一、二叉搜索树的概念又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3、它的左右子树也分别为二叉搜索树二、对二叉搜索树的操作1、搜索规则:从根节点开始,若根节点不为空如果根节点key等于查找
2018-01-28 01:14:02 245
原创 AVL树
AVL树一、概念一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:1、它的左右子树都是AVL树2、左子树和右子树高度之差(简称平衡因子)的绝对值不超过1如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在O(lgn),平均搜索时间复杂度O(lg(n))二、平衡化如果在一个原本平衡的二叉搜索树中插入一个新节点,可能会导致二叉搜索树不平衡,
2018-01-26 16:50:12 338
原创 栈的应用之括号的匹配
我们在学习了栈以后可以运用栈进行一些算法应用,比如对一个表达式进行括号匹配检测,具体可分为以下四种情况:char a[] = "(())abc{[(])}"; // 左右括号次序匹配不正确char b[] = "(()))abc{[]}"; // 右括号多于左括号char c[] = "(()()abc{[]}"; // 左括号多于右括号char d[] = "(())ab
2017-11-21 23:09:55 457
原创 Linux 知识点一
在Linux中,有俩种用户:超级用户(root),普通用户超级用户(命令提示符是“#”):可以在Linux系统下做任何事情,不受限制普通用户(命令提示符是“$”):在Linux下做有限的事情。有以下几种基本权限:(1)读:Read(字符表示为r)对文件具有读取文件内容的权限;对目录具有浏览该目录信息的权限(2)写:Write(字符表示为w)对文件来说具有修改内容的权限;对目录具
2017-11-18 10:51:31 303
原创 一些字符串操作函数的模拟实现
下面我们模拟实现一下几个字符串操作的函数。模拟实现strncpy:#include#include#includechar *my_strncpy(char *dest, char *src, size_t n){ assert(dest != NULL); assert(src != NULL); char *p = dest; while (n) { *dest
2017-07-29 21:08:51 349
原创 改良版的顺序表(动态)
SeqListD.h:#ifndef __SEQLISTD_H__#define __SEQLISTD_H__#include #include #include #include #define DEFAULT_SZ 2#define INC 1typedef int DataType;typedef struct SeqList{ DataType* data
2017-07-29 20:54:15 305
原创 静态顺序表的实现
Seqlish.h:#ifndef __SEQLIST_H__#define __SEQLIST_H__#include #include #include #include #define MAX 10typedef int DataType;typedef struct SeqList{ DataType data[MAX]; int sz;}SeqList
2017-07-29 20:47:02 326
原创 c语言通讯录
contact.h#ifndef __CONTACT_H__ #define __CONTACT_H__ #include#include#include#define MAX 1000 #define NAME_MAX 20 #define SEX_MAX 5 #define ADDR_MAX 30 #define TELE_MAX 12 typedef struct
2017-07-17 09:11:20 575 2
原创 用c语言编写折半查找法
折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了。#includeint binary_search(int *arr, int key, int sz)//创建一个函数{ int left = 0;//定义数组中元素的左下标 int right = sz - 1;//定义数组中元素的右下标 int mid = 0;//定义数组中一个元素的下
2017-04-09 17:18:41 6793 1
原创 break与continue的区别
本文主要讲述一下break关键字与continue关键字用法的区别break关键字很重要,表示终止本层循环。这是没加break之前的,它的输出结果是0,1,2,3,4,5,6,7,8,9。#includeint main(){ int i = 0; for (i = 0; i < 10; i++) { printf("%d\n", i); } return 0;
2017-04-07 22:54:22 389
原创 一个初学者的自白
我是一个刚开始学习编程的菜鸟,虽然很不想做菜鸟,但没办法人要为自己的不努力买单。现在努力虽然不算早,但也就晚了那么一丢丢吧。希望能努力赶在大二结束之前加油摆脱菜鸟这个称号。总会有那么一天,天高仍鸟飞,海阔凭鱼跃。
2017-04-07 22:28:26 359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人