- 博客(42)
- 收藏
- 关注
原创 C语言冒泡排序
C语言冒泡排序基本思路创建一个中间变量,用于交换两个比较完大小的变量值的交换。两层for循环嵌套,a[i]和a[j]不断比较,只要发现a[i] < a[j]则交换两个值。一直执行到循环结束。代码#include <stdio.h>void SortCal(int a[], int sz){ int i = 0; int j = 0; int tmp = 0; for(;i < sz;i++) { for(j = 0;j < sz ;j++) {
2021-03-16 14:35:31
195
原创 html 图片插入
分清相对路径、绝对路径1.相对路径相对是相对于你当前所编辑的HTML页面的路径,比如../../desktop/测试页面/test.html。这就是相对路径../ 代表上级目录目录会随着文档的位置改变而改变。2.绝对路径绝对是绝对与当前主机系统的文件的路径,比如C:/Users/Administrator/Desktop/测试页面/media/demo.mp4。这就...
2019-01-13 11:34:15
1158
原创 linux tar常见命令详解
在使用Linux解压和打包文件时会常用到下面两个命令解压:tar -zxvf 文件名 路径打包:tar -zcvf 文件名 路径我们常常会对其中的命令参数产生疑惑,所以对这些参数的作用进行了整理-z:打包后用gzip压缩,生成.tar.gz后缀的文件-j:打包后用zip2压缩,生成.tar.bz2后缀的文件-v:压缩的过程中显示文件;-f:使用文件名,注意(在f后要立即
2017-08-31 21:12:34
564
原创 C++ 继承再探
在C++中子类继承父类的方式有三种public、protected、private。1、首先无论哪种继承在子类内部基类的protected和private成员都可以被访问,private则是被禁止访问的2、三种访问限定符:public:成员在子类和类外都可以被访问 protected:成员在类外不可以被访问,
2017-08-19 23:47:17
246
原创 C++ 内存对齐及空类大小
一、类1.类使用了c++封装的特性,将变量和函数封装在其内部,成为成员变量和成员函数,并用public、protect、private这三个访问限定符,决定是否可以在类外访问成员变量和函数,public可以在类外访问,其他不行。另外class默认是private的,struct默认是public的。2.类产生了一个新的作用域。3.用类类型创建对象的过程称为类的实例化二、内存对齐
2017-07-18 23:19:44
459
原创 数据结构 初识STL之空间配置器
一、STL STL有六大组件,分别是空间配置器、适配器、类型萃取、容器、仿函数、迭代器。 1. 空间配置器:内存池实现小块内存分配,对应到设计模式–单例模式(工具类,提供服务,一个程序只需要一个空间配置器即可),享元模式(小块内存统一由内存池进行管理)2.迭代器:迭代器模式,模板方法3.容器:各种数据结构,用来存放数据如vector、list、map、set、deque4.类型萃取:基于范型编程
2017-07-16 16:19:48
318
原创 C/C++ 返回值、参数列表、缺省等区别
一、返回值C中:如果函数未指定返回值类型,则默认为int c++中:如果一个函数没有返回值,返回值类型必须指定为void二、参数列表C中:如果函数没有指定参数列表,则默认可以接受任意多个参数C++中:有严格的类型检测,没有参数列表的函数默认为void,不接受任意参数三、缺省参数(即给参数一个默认值)C:不支持C++:支持(如果没有指定实参则使用缺省值,有则使用指
2017-07-16 00:42:32
1520
原创 linux 进度条的脚本实现
一、背景 在学习了脚本符号和语法后,脚本就是一系列命令和变量的集合,其中的变量可以是本地变量,也可以是全局变量。基于此,可以写一个小的脚本出来,比如进度条 二、代码 其中使pintf打印出有颜色的、或者闪烁的进度条的相关参数如下: #define NONE “\033[m” #define RED “\
2017-07-03 22:25:12
603
转载 linux shell eval命令
本文将会讲解一些linux中命令的使用与技巧希望对新手给予帮助一 e v a l命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。e v a l命令也可以用于回显简单变量,不一定是复杂变量。1 eval命令也可以用于回显简单变量,不一定是复杂
2017-06-28 17:28:30
377
原创 Linux 命令代换反引号和$()
一、“和$( ) 这两种代换都是将其内部的命令执行得到的结果代替原命令,执行下一步。 但两者在使用上还是有细微区别的: 我们用转义字符 \ 来测试 从上面两图中看到两点: 1.“中的\没有对$进行转义,取到了HOSTNAME的内容2.而$()中的\则实现转义,并没有有取到HOSTNAME内容,而是当成了一个字符串而这两图的结果正好与上面相反,由此得出两个结论: 1.“中 : \
2017-06-28 17:25:36
441
原创 Linux 多路转接之epoll
一、epoll 作为多路转接中最晚出现的、也是性能最好的多路I/O就绪通知方法,epoll 继承了select和poll的优点,并且克服了select的描述符数量上限和poll的线性扫描的缺点。其实现机制是通过两个数据结构,红黑树保存所有的描述符,就绪队列则只保存已经就绪的描述符。二、接口 1. int epoll_create(int size)创建⼀个epoll的句柄。⾃从linux2.6
2017-06-11 18:04:12
296
原创 linux 多路转接之select
一、 select函数 1.定义 select:该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它。 2.作用 (1)系统提供select函数来实现多路复用输入/输出模型。 (2)select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。 3.接口参数 FD_CLR(inr fd,fd_set* set);用来清除描述
2017-06-09 16:00:56
325
原创 Linux tcp_socket实例
一、利用tcp协议、socket模拟实现网络通信 网络中不同主机间的通信,实质上是网络中两个唯一的进程间通信,而IP地址加端口号可以表示网络中唯一的一个进程,即socket。tcp协议则可以实现全双工通信,同时接收数据。这次IP可以使用ifconfig查看本机IP为10.100.32.52,端口使用8080端口。 二、代码实现 1、创建源文件并编写Makefile
2017-05-31 23:48:47
433
原创 Linux CRC校验码
1、CRC简介:CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。crc校验原理:利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(C
2017-05-15 23:19:53
906
原创 linux mysleep实现
#include #include #include void handler(void* avg){ //自定义处理动作:什么也不做!}int my_sleep(int timeout){ sigset_t set; sigemptyset(&set); struct sigaction act ,oact;//创建两
2017-05-03 13:09:53
365
原创 Linux 可重入函数与线程安全
一、 可重入函数简单来说,就是可以被中断的函数。当函数正在运行时,被系统切出去,执行其他线程,当系统再一次切回这个函数时,函数状态,上下文等都没有改变,即这个函数是可重入函数,反之则不是。满足可重入函数的条件: 1、不使用全局变量或静态变量; 2、不使用用malloc或者new开辟出的空间; 3、不调用不可重入函数; 4、不返回静态或全局数据,所有数据都有函数的调用者提供; 5、使用本地数
2017-04-24 20:55:16
348
原创 Linux 生产者、消费者之环形队列信号量
一、环形队列实现生产者与消费者的互斥与同步用sem_wait()、sem_post()实现二者的互斥与同步二、接口sem_tsem_init()sem_wait()sem_post()sem_destroy()三、代码实现#include <stdio.h>#include <semaphore.h>#include <pthread.h>#include <unistd.h>#de
2017-04-19 12:33:49
688
原创 Linux 互斥锁的实现
一、互斥锁的作用 线程可以在自己的栈空间内使用自己内部的变量,当线程想使用一个在堆上开辟的全局变量时,其他线程也是可以看到这个全局变量,为了保护这个临界区,引入了互斥锁(mutex),实现线程的互斥与同步。 二、互斥锁的实现 1.不引入互斥锁 用两个线程来对一个全局变量实现累加5000次,累加时多次使用赋值表达式来使两个线程的上下文混乱,本来的结果应该为10000,这里只有5000上
2017-03-29 17:22:29
857
原创 Linux 消息队列的实现
一、创建头文件、源文件、发送、接收程序并编写Makefile 编写Makefile 二、编写头文件和源程序 1.头文件 2. 源程序 三、接收、发送程序 1.server.c 先收后发 2.client.c 先发后收 四、实现效果 1.分别运行server、client通过消息队列实现进程间通信来模拟聊天 client先发消息 2.root权限下监控
2017-03-22 13:16:03
1097
原创 linux 匿名、命名管道的实现
一、匿名管道 匿名管道根据父子进程共享代码,父进程创建一个管道文件,并有两个文件描述符指向管道文件,子进程也有两个文件描述符指向管道文件。利用文件描述符,一端关闭读,一端关闭写,来实现通信。#include <stdio.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/wait.h>i
2017-03-14 21:45:52
567
原创 Linux 管道pipe
一、何为管道?管道是一种最基本的IPC机制,由pipe函数创建:#include int pipe(int filedes[2]);调用pipe函数时在内核中开辟一块缓冲区(称为管道)用于通信,它有一个读端一个写端,然后通过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端(很好记,就像0是标准输出1是标
2017-03-08 23:26:47
420
转载 Linux file结构体
Linux--struct file结构体struct file(file结构体): struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建
2017-02-20 23:31:21
1138
原创 Linux atexit函数回调顺序,文件权限
1.atexit回调函数atexit函数它的作用是在它所在的程序结束后,回调在其内部注册的函数,但它的回调顺序有是怎样的呢?我先注册了三个由此可见,它的回调顺序和栈类似,先注册后回调有些人说atexit的注册函数有限制(一般为32个),我在Linux环境下试试在Linux centos6.5 的环境下atexit中的注册函数是没有限制2.
2017-02-19 22:18:52
392
转载 Linux 进程调度算法
linux内核的三种主要调度策略:1,SCHED_OTHER分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到
2017-02-19 11:01:42
403
转载 linux PCB task_struct结构体
task_struct结构描述 1. 进程状态(State)进程执行时,它会根据具体情况改变状态 。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。 内核表示含义TASK_RUNNING可运行TASK_INTERRUPTIBLE可中断的等待状态
2017-02-17 23:19:13
393
原创 linux 进度条原理,缓冲区,回车换行
要了解进度条原理首先要知道什么是缓冲区和回车换行?缓冲区:利用存储区缓解数据到达速度与离去速度不一致而采用的技术称为缓冲,此时同一数据只包含一个拷贝。例如:操作系统以缓冲方式实现设备的输入和输出操作主要是缓解处理机与设备之间速度不匹配的矛盾,从而提高资源利用律和系统效率。在写进度条的时候,并不会马上打印,而是存在buffer(缓冲区)里,这是想要让强制刷出buffer里的数据,
2017-02-17 12:09:01
445
原创 Linux vim配置及常见错误
一、vim配置1.配置文件的位置首先cd ~进入工作目录,然后ls -al看~/目录下是否存在.vim目录和.vimrc文件,没有的话,自行创建2.安装插件: TagList(高效浏览源码)和插件: WinManager(文件浏览器和窗口管理器)插件:Taglist下载地址http://www.vim.org/scripts/script.php?script_id
2017-02-16 00:48:33
3863
原创 Linux access time,modify time,change time,find命令符
vim命令改变了access time ,echo "hello bit">test.c命令改变了 Modify time和Change time其中的Access,Modify,Change的意思分别为:atime(Access time):最后一次访问文件或目录的时间mtime(Modify time):最后一次修改文件或目录的时间ctime(Change ti
2017-02-14 19:15:31
548
原创 c++ 模板
先介绍一个概念泛型编程泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段,模板是泛型编程的基础。函数模板函数模板:代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。函数模板的格式template 返回值类型 函数名(参数列表){ ...}定义模板关键字template T Add(T left,
2016-12-07 10:48:58
262
原创 c++ 多态/虚表剖析
对象的类型静态类型:对象声明时的类型,是在编译时确定的动态类型:目前所指对象的类型,是在运行时确定的多态多态:一词最初来源于希腊语,意思是具有多种形式或形态的情形,在c++语言中多态有着更广泛的含义静态多态:编译器在编译期间完成的,编译器根据函数实参的类型可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数有调用该函数,否则出现编译错误。动态多态多态绑定:
2016-11-13 10:45:46
359
原创 c++ 继承
1.继承概念继承概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承格式class DerivedClassName:public BaseClassNameclass DerivedClassName:prote
2016-11-05 22:54:45
277
原创 c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载
构造函数#include "stdafx.h"#include using namespace std;class String{public: String() {}类的实例化特点:1.函数名和类名相同;2.没有返回值;3.不能用const修饰。拷贝构造函数是特殊的构造函数,创建对象时使用存在的同类对象来进行初始化,由编译器自动调用。
2016-11-02 20:29:16
802
原创 C语言 static
c语言中的staticstatic 对变量的修饰(1)函数体内部时,被修饰的变量作用域仅限于函数内部; 函数第一次被调用后,static变量初始化(只能初始化一次); 存储于静态变量区,函数调用结束后其值不变; 生命周期从函数调用到main函数结束之后。(2)全局static变量,作用于源程序内部;
2016-10-19 22:34:24
268
原创 c++ this指针浅谈
this 指针【特性】1.this指针的类型 类类型* const2.this指针并不是对象本身的一部分,不影响sizeof的结果。3.this指针的作用域在类成员的内部。4、this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不能显示传递。5,、只有在类的非静态成员函数中可以使用this指针其他任何函数都不可以。_this指针调用约定
2016-10-10 15:26:22
280
原创 Linux find命令
Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的
2016-07-15 22:03:16
340
原创 C语言 求两个数的最大公约数
#include int main(){ printf("请输入两个整数:\n"); int a,b; scanf("%d%d",&a,&b); int n=a; if(n>b) n=b; for(int i=n;i>=1;i--) { if(a%i==0&&b%i==0)
2016-07-03 22:06:55
327
原创 C语言 将三个数按从大到小输出
#includeint main(){ int a,X,Y,Z; printf("请输入三个整数:\n"); scanf("%d%d%d",&X,&Y,&Z); if(X { a=X;X=Y;Y=a; } if(Y { a=Z;Z=Y; if(X>=a)Y=a; else
2016-07-03 22:05:48
460
原创 C语言 将一个整数的二进制序列分别输出
#includeint main(){ int i, j, num; char arr1[16]; char arr2[16]; printf("输入一个整数:"); scanf("%d", &num); for (i=0,j=0;i{ arr1[15-j]=(num>>i)&1;} for(j=0;j
2016-07-03 22:04:01
675
原创 C语言 实现两个数组内容交换
#include #include int main(){ int a[]={1,2}; int b[]={3,4}; int i,j,k,h; for(i=0;i printf("b[i]=%d",a[i]); printf("\n"); for(i=0;i printf("a[i]=
2016-07-03 22:01:23
1822
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人