自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 信号block\pending、可重入函数

首先,先说明几个概念: 信号递达:实际执行信号的动作 信号未决:信号从产生到递达的状态 信号处理有三种情况:默认、忽略、用户自定义每个信号都有三个表:block、pending、handler block:表示信号是否被阻塞。用数据类型sigset_t存储的,0表示不被阻塞,1表示被阻塞。被阻塞的信号在产生时保持未决状态,直到进程解除对信号的阻塞,才执行递达的动作。...

2018-06-27 21:16:03 502

原创 进程间关系及守护进程

进程组作业会话进程组每一个进程都是属于一个进程组的。显然,它们的PCB中除了有进程ID之外,还有所属组的进程组ID。那进程组ID又是怎么来的呢?每一个进程组都有一个组长进程(该组长进程是进程组的第一个进程),组长进程ID就为进程组ID。组长进程可以创建进程组,创建该组中的进程。进程组的存在与否并不与组长进程是否终止相关,即进程组中只要有一个进程存在,那么进程组就存在。作业...

2018-06-27 18:00:45 227

原创 进程调度算法、task_struct结构体、僵尸进程,、孤儿进程

进程调度算法:先来先服务(FCFS) 按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。轮转法(Round Robin) 将系统中所有的就绪进程按照FCFS原则,排成一个队列。 每次调度时将CPU分派给队...

2018-06-21 12:47:22 236

原创 malloc/free/new/delete详解

malloc/realloc/calloc在C语言中我们常用malloc/calloc/realloc动态开辟空间,free释放空间。 那malloc/calloc/realloc又有什么不同? 函数原型如下void *malloc( size_t size );//参数是开辟空间的字节数void *calloc( size_t num, size_t size );//第一个参...

2018-06-19 11:09:23 207

原创 fd与FILE结构体

文件描述符 每个进程都有一个指针*file,指向表file_struct,该表中最重要的部分是fd_array[]的一个指针数组,每个元素都是一个指向打开文件的指针。文件描述符就是该数组的下标。系统对每一个进程都默认打开三个文件:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)。对应的文件描述符分别是0、1、2。在Linux下,对设备和文件的操作都使用文件描述符来进行的...

2018-06-18 22:17:10 293

原创 管道

管道匿名管道命名管道匿名管道:创建:命令|创建、函数int pipe(int pipefd[2]);创建 pipe创建匿名管道: 父进程fork出子进程,父进程关闭读端、子进程关闭写端。如图, 注:0、1、2、3、4是文件描述符 管道特点:只能用于具有亲缘关系的进程间通信管道提供流式服务管道生命随进程,即进程结束,管道释放一般情况下,内核对管道操作进行同步与互斥...

2018-06-14 12:09:03 268

原创 函数重载

函数重载 概念:作用域相同、函数名相同、但函数参数不同(包括参数个数、参数顺序、参数类型不同)的函数形成重载。int Add(int a,int b){ return a+b;}int Add(int a,int b,int c){ return a+b+c;}int Add(char a,int b){ return (int)a+b;}...

2018-06-12 16:53:59 235

原创 信号的产生

信号什么是信号? 在程序正常执行过程中可能出现一个情况,Linux可以相应这些异常情况,当异常情况来了以后,我们的程序要执行相应的动作。那个情况就是一个信号。 产生信号的方式通过终端按键产生信号硬件异常产生信号调用系统函数向进程发信号软件条件产生信号注意:信号由操作系统发送 操作系统与进程是管理者与被管理者的关系。管理者与被管理者不直接沟通,管理者根据底层硬件数据与...

2018-06-11 17:29:14 1150

原创 C++引用、指针、值

引用引用概念: 引用不是新定义一个变量,而是给已存在的变量取一个别名。编译器不给引用变量开辟空间。创建引用变量: C++给&符号赋予了一个新的含义,用来声明引用,如下:int a = 10;int& ra = a;//ra为a的引用此处ra与a的值和地址都相同,其实就是同一内存空间的取得两个名字 注意:引用变量必须初始化,且之后永不改变,即只能引用...

2018-06-11 11:42:46 458

原创 静态库、动态库

静态库 其中L+库路径,-l+库名删除静态库之后,仍然能执行 代码如下://add.h 1 #ifndef __ADD_H__ 2 #define __ADD_H__ 3 4 int add(int x,int y); 5 6 #endif //__ADD_H__ 7 //add.c 1 #include"add.h" 2 ...

2018-06-08 15:06:39 139

原创 自主shell输入、输出重定向

重定向 什么是重定向?一般情况下、Linux运行命令时都会打开三个文件:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)。文件描述符分别为0、1、2。重定向就是把原本应该到标准输入、标准错误、标准输出的内容到file中。重定向的本质是什么?例如,printf是c库中的IO函数,会把内容输出到stdout,在stdout底层访问文件的时候,找的还是fd...

2018-06-08 14:07:05 263

原创 时间、空间复杂度

时间复杂度时间复杂度大O渐进表示法O(f(N)),其中f(N)是算法语句执行次数关于问题规模的函数。O(n)计算方法用常数1代替运行次数函数中的所用加法常数修改后运行次数函数中只保留最高阶改最高阶系数为1递归算法递归算法时间复杂度 = 递归总次数*每次递归的运行次数空间复杂度空间复杂度大O渐进表示法O(f(N)):其中f(N)是创建对象的个数...

2018-04-20 18:49:00 107

原创 结构体详解

结构体结构体声明struct tag //结构体名称可以省略,但建议不要省略{ /*数据成员*/}s,*p/*可以在声明的同时定义变量*/;举个例子struct{ int i; char c;}x;struct{ int i; char c;}*p,s;注意:这里是匿名结构体,编译器把二者看作完全不同的类型...

2018-04-20 17:56:56 604

转载 linux重要命令、重要目录、 如何使用命令安装gcc/g++, gdb, vim

权限cd:x touch:wx ls:rx rm:wx mv:wx重要目录/bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。 /sys: 文件系统访问 Linux内核 /SELinux SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含...

2018-03-24 23:33:39 260

原创 指针(1)

先分清两个概念:数组指针、指针数组。指针数组    指针数组就是一个存放指针的数组。数组指针  数组指针就是一个指针,这个指针指向数组的地址。      //下面分别是数组指针和指针数组的定义。   int (*p)[];//数组指针  &nbs

2018-03-23 20:36:04 203

原创 可变参数列表

可变参数列表  1.参数至少有一个  2.函数传参是从右往左传,而且是连续的。  所以我们可以通过最后一个参数的地址及每个参数的所占字节数、参数的个数,访问每一个参数。int  average(int n, ...){ va_list arg; int sum = 0; int I = 0; ...

2018-03-19 23:24:25 144

原创 栈帧调用

首先要了解1.函数调用就要开辟栈空间,是用于本次函数调用中的临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。2.栈空间是向低地址生长。堆区与栈区相对生长的。利用一个例子来解释函数调用、栈帧的创建和销毁。#include<stdio.h>int fun(int a, int b){ int z = a+b; return z;}int ...

2018-03-19 22:20:04 338

原创 三子棋游戏

游戏部分思路: 初始化棋盘->(玩家下棋->输出棋盘->判断输赢->电脑下棋->判断输赢)(循环这部分,直到有人赢得比赛) 效果图 //test,c源文件#define _CRT_SECURE_NO_WARNINGS#include "game.h"void menu(){ printf("******************************\n");

2018-01-07 21:46:16 754

原创 扫雷游戏

思路: 初始化->设置雷盘->判断,计算周围雷个数,实现爆炸式展开 1.初始化 我们把雷盘和显示雷数的数组分别初始化,显示雷数的数组初始化为‘*’,雷盘初始化为‘0’.为了初始化函数通用数组设置为char型,设置雷盘是9*9的,为了便于计算雷数,数组设置为11*11 2.设置雷盘 雷‘1’,其余‘0’//test.c源文件#include "game.h"void menu()/

2018-01-06 23:05:46 324

原创 操作符

操作符:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符

2017-12-20 22:34:20 317

空空如也

空空如也

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

TA关注的人

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