自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 命令代换``和$()区别,eval命令

eval eval主要用在对参数的特殊处理上,一般的命令行,shell对参数只执行一遍。eval会对后面的参数进行两遍扫描,如果第一遍扫描,cmdline只是个普通参数,就直接执行命令。若cmdline的变量又间接引用,则扫描第二遍,执行间接引用的语义。而用echo $cmd时,只进行一次扫描。 “和$()区别$()用起来简洁,倒引号较容易混淆。多层结构的替换中,倒引号需要/处理,写起来

2017-07-12 16:42:15 386

原创 Select服务器

select#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>int array_fds[1024];static void Usage(const char *

2017-07-11 16:52:02 341

原创 UDP_server

udp_client.c#include<stdio.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>static void Usage(const char* proc){ printf("Usage:%s[loc

2017-07-08 15:28:13 341

原创 基于TCP的客户服务器模式的三种通信

在以下的客户端/服务器程序实例中,TCP_server.c的作用是接受client请求,并与client进行简单的数据通信,整体为一个阻塞式的网络聊天工具。首先我们需要了解几个socket API:int socket(int domain, int type, int protocol); domian指协议族/域,IPV4采用AF_INET; type是套接口类型,对于TCP采用SOCK_

2017-07-08 14:10:29 1817

原创 TCP协议 标记位&定时器&三次握手四次挥手

TCP段格式: 1、标记位 URG(紧急位) 紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)PSH(急迫位) 在一个交互程序中,当客户发送一个命令给服务器时,它设置

2017-07-03 10:29:17 1380

原创 网络端口的分类

网络通信的实质是两台主机上的进程进行通信,IP地址标识了互联网中的唯一一台主机,而端口号标识某台特定主机的特定进程,由此我们可以用 IP+端口号 来标识互联网中的唯一进程。网络端口的分类TCP/IP中协议字段占2个字节16个比特位。即0-65535,端口号用来表示和区别网络中的不同应用程序。(1)公认端口 公认端口(Well Known Ports):0-1023之间的端口号,也叫Well Kn

2017-07-02 11:01:55 902

原创 NAT技术与代理服务器调研

网络地址转换(NAT): 是一种方法,重新映射一个IP的地址空间通过修改到另一网络地址中的信息的互联网协议(IP)数据报分组报头,而他们在整个交通运输路由设备。内部私有网络地址(IP地址)翻译成合法网络IP地址的技术该技术最初用于为便于重新路由IP网络流量,而不会重编的每个主机的。它已成为在保护中面对全局地址空间分配一个流行的和必要的工具,IPv4地址耗尽通过共享NAT网关的一个Internet路

2017-06-29 16:19:11 1028

原创 编写arp脚本抓取对应主机mac地址

ARP地址解析协议常用在局域网内实现IP地址到MAC地址转化。从而或得目的主机的硬件地址 每台主机都维护一个ARP缓存表。可以用arp -a命令查看 用arp脚本也可以查看缓存表,下面给出脚本代码及运行结果: i=1 3 proc_count=0 4 while [ $i -le 255 ] 5 do 6 if [$proc_count -ge 20];then

2017-06-29 15:37:11 1335

原创 CRC循环冗余码

CRC即循环冗余校验码:是数据通信领域最常用的一种差错校验码,其特征是信息字段和校验字段长度可以任意选定。CRC的原理: 在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为

2017-06-28 16:23:19 1808

原创 crond与crontab调研

crond :linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crontab:linux 系统是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多

2017-06-28 15:25:03 900

原创 守护进程

守护进程所谓守护进程就是7*24小时一直运行在服务器端不受登录、注销影响。也称精灵进程。守护进程自成组自成会话。这里有一点需要说明,后台作业并非守护进程,后台进程是指会话内部的作业,当关闭会话时会话内部所有后台作业都会结束而守护进程自成会话,所以不受影响。**创建**一个守护进程需要调用setsid命令,但这条命令不能由该组组长调用,所以在创建后台进程时应先fork子进程,然后让子进程调用se

2017-06-27 21:08:34 662

原创 哈希表线性探测&二次探测

在代码中实现了哈希表中任意类型都可以存放,即哈希函数要可扩展以及哈希表动态增容的功能。贴上代码:#include#includeusing namespace std;template//特化 class _HashFun { public: size_t operator()(K key) { return key; } }; template<>

2017-06-09 11:00:36 2673

原创 线索化二叉树 前中后序线索化及前序中序遍历

#pragma once#includeusing namespace std;enum PointInfo{LINK,THREAD};//保存节点线索信息templatestruct BinaryTreeNodeThd{ T _data; BinaryTreeNodeThd* _pLeft; BinaryTreeNodeThd* _pRight; PointInfo

2017-05-07 16:57:32 1246

原创 二叉树面试题

1、>> 二叉树的后续遍历非递归void PostOrder_Nor()//后序遍历 非递归 { if(_pRoot == NULL) return; stack s; Node* pCur = _pRoot; Node* prev = NULL;//临时变量 保存刚刚访问过的节点 while(pCur || !s.empty()) { whil

2017-05-07 16:55:00 1004 2

原创 二叉树基本操作及面试题

#include#include#include#includeusing namespace std;templatestruct BinaryTreeNode//给出二叉树节点的结构体{ BinaryTreeNode(const T& value) :_value(value) ,_pLeft(NULL) ,_pRight(NULL) {} T _value;

2017-05-07 16:52:06 1029 2

原创 文件描述符fd与文件指针FILE*的关系

文件指针是指向一个FILE的结构体,这个结构体里包括一个文件描述符(在Windows下也被称为文件句柄)和一个I/O缓冲区。文件描述符用于ANSI C标准的IO库调用中,用于标识文件。FILE中包含文件描述符元素,可以用fopen()直接获取指针fp,然后使用fp获得fp中所包含文件描述符fd的信息。文件描述符应该是唯一的,而文件指针却不是唯一的,但指向的对象是唯一的。FILE *比fd更

2017-04-27 13:56:11 5116 1

原创 C++实现稀疏矩阵的压缩存储

什么是稀疏矩阵呢,就是在M*N的矩阵中,有效值的个数远小于无效值的个数,并且这些数据的分布没有规律。在压缩存储稀疏矩阵的时候我们只存储极少数的有效数据。我们在这里使用三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后次序依次存放。下面我们来看一下代码实现。#include#includeusing namespace std;templateclass SparseMat

2017-04-23 15:12:03 6532

原创 Linux中的僵尸进程与孤儿进程

1、僵尸进程一个子进程在其父进程没有调用wait()或waitpid()的情况下退出,这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。运行结果2、孤儿进程一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由in

2017-04-21 21:16:32 990

原创 输出全排列

//输出全排列,时间复杂度近似为O(N!)void Prem(int* arr, int size, int N){ int idx = 0; if(size == N) { for(idx = 0; idx < size; idx++) { cout<<arr[idx]<<" "; } cout<<endl; } else { for(idx = N;

2017-04-21 15:12:39 1040

原创 括号匹配算法

bool IsBracket(char ch){ if(ch == '(' || ch == '[' || ch == '{' || ch == ')' || ch == ']' || ch == '}') { return true; } return false;}bool MatchBracket(char* str, size_t size){ int idx = 0

2017-04-21 15:05:07 955

原创 简易迷宫--递归算法实现

#include#includeusing namespace std;#define MaxCol 10#define MaxRow 10struct Seat//定义一个表示位置的结构体{ Seat(int x,int y) :_x(x) ,_y(y) {} int _x; int _y;};class Maze{public: Maze(int ar

2017-04-21 14:21:23 1237

原创 实现逆波兰表达式(后缀表达式)的运算结果

在栈的应用中有一个最经典的例题,那就是逆波兰表达式的求值。enum OPERATOR//定义一个枚举类型{ DATA,//数字 ADD,//下面为操作 SUB, MUL, DIV,};struct Cell//定义一个结构体包含数据及操作{ OPERATOR op; int data;};int CalaRPN(Cell cell[],size_t size)//计算

2017-04-21 13:50:12 1780

原创 实现Stack的基本操作

简单来说,栈是一种特殊的线性表,只允许在固定一端(栈顶)进行插入和删除元素的操作。因此栈又被称为后进先出的线性表。下面就来看看它可以进行哪些基本的操作。在进行扩容时,如果是对栈中基本数据类型的操作我们使用浅拷贝memcpy,否则用=进行拷贝,所以在这里用到了类型萃取。下面看一下代码实现。/////////////////////实现Stack的基本操作/////////////////////

2017-04-21 13:02:36 1312

原创 实现循环队列的基本操作

templateclass Queue{public: Queue(size_t capacity = 5) :_front(0) ,_rear(0) ,_capacity(capacity+3)//加一个常数防止传参为0程序奔溃 ,_count(0) { _pData = new T[_capacity];//开辟空间 } void Push(const T&

2017-04-21 12:34:36 1864

原创 C++实现对称矩阵以及压缩存储

#includeusing namespace std;///////////////////////////实现对称矩阵以及压缩存储/////////////////////////////////////templateclass SymmetricMatrix{friend ostream& operator& s);//声明一个友元重载输出符号public: Symmetr

2017-04-21 11:59:59 2988

原创 数据结构--递归练习

///////////////////////////////////////递归练习//////////////////////////////////////#includeusing namespace std;//求前N个自然数之和int Sum(int N){ if(N == 1) return 1; return Sum(N-1)+N;}//求N的阶乘int

2017-04-20 22:43:32 926

原创 C语言实现顺序表--静态

///////////////////////////C语言实现静态顺序表///////////////////////#include#include#define MaxSize 5typedef int DataType;typedef struct SeqList{ DataType arr[MaxSize]; size_t size;}SeqList,*pSeqLi

2017-04-12 18:11:06 662

原创 C语言实现单链表

#include#include#includetypedef int DataType;typedef struct Node{ DataType data;//数据域 struct Node* next;//保存下一个节点地址的指针域}Node,*PNode;void InitList(PNode* pHead)//初始化 传二级指针{ assert(pHead);

2017-04-12 18:08:58 614

原创 shared_ptr 循环引用问题

前面学习智能指针的时候已经模拟实现过C++标准库中的auto_ptr两种方法还有scoped_ptr、scoped_array、以及shared_ptr

2017-04-06 17:33:02 841

原创 浅析C++标准库与boost库中的智能指针

什么是智能指针呢,它是行为类似于指针的类对象,但这种对象还有其他功能。我们为什么要封装智能指针类对象呢?这是因为C++中的动态内存需要用户自己来维护,动态开辟的空间,在出函数作用域或者程序正常退出前必须释放掉,否则会造成内存泄漏,所以我们会定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。再来看下面一段程序,这里一段空

2017-04-04 23:43:41 559

原创 Linux下简易进度条的实现

生活在高科技时代的我们,在电脑或手机上游戏娱乐时,通常会看到加载页面或者下载东西的过程中会出现一个不断变长直到填满整个小长方形的条状物,专业一点来说它就叫做进度条。下面我们可以用C语言代码自己来实现一个简易的进度条。首先要实现进度条我们就要了解它的原理。在C语言中对printf函数来说,它的输出会先被写在一段缓冲区中,用回车换行进行行刷新。而不是直接输出到显示器上。在Linux下,/n

2017-04-04 20:26:20 241

原创 Centos下vim的简单配置

vim是Linux下强大的编辑器,我们可以自己进行各种配置和插件的安装。首先在目录/etc/下面,有个名为vimrc的文件,里面就是默认配置,这是系统中公共的vim配置文件,对所有用户都有效。而我们一般自己配置时在当前用户的主目录下新建一个私有的配置文件,命名为".vimrc"。我们只要在命令行输入 vim .vimrc 进入.vimrc文件进行配置即可。我只是简单配置了一下。

2017-03-28 21:37:26 435

原创 C++关于异常

在介绍C++异常处理之前先回顾一下在C语言中我们是如何来处理异常的。1、终止程序(除数为零)2、返回错误值(errno,GetLastError()获取系统出现的最近的错误码)3、返回合法值,让程序处于某种非法状态(atoi函数)4、调用程序预先准备好的在出现错误时用的函数(回调函数)5、直接退出,暴力解决(abort(),exit()函数)6、使用goto语句7、se

2017-03-26 12:17:30 264

原创 Linux下的粘滞位简单介绍

通常情况下用户只要对某个目录具有w写入权限,便可以删除该目录中的任何文件,而不论这个文件的权限是什么。比如我们进行如下操作:在Linux中"/tmp"、"/var/tmp"目录作为Linux系统的临时文件夹,权限为"rwxrwxrwx"即允许任意用户、任意程序在该目录中进行创建删除移动文件或子目录等操作。但是如果任意一个普通用户都能删除系统服务运行中使用的临时文件,将造成严重后果。

2017-03-26 11:56:33 246

原创 find指令——Linux

find命令是在目录结构中搜索文件并执行指定的操作find命令格式:find pathname -options[-print,exec,-ok ...]pathname:find命令所查找的目录路径,用.表示当前目录,/表示系统根目录-print:find命令将匹配的文件输出到标准输出-exec:find命令对匹配的文件执行该参数所给出的shell命令,相应命令形式为‘com

2017-03-25 23:25:53 239

原创 高级冒泡排序-->用模板仿函数再次实现

#includeusing namespace std;///////////////////////////使用模板类及仿函数来实现冒泡排序///////////////////////////////template class Great { public: bool operator()(T& left, T& right)//重载() { return

2017-03-21 20:59:49 327

原创 用stat命令查看文件时的三个时间点

在Linux中我们用stat来显示文件的信息,那么显示的信息中Access、Modify、Change这三个类型的时间又代表着什么意思呢。(1)首先我们touch一个file,用stat命令查看三个时间信息如图所示,会出现3个类型的时间,分别是Access,Modify,Change。下面我们就对这3个时间进行解释。Access:最后一次访问(仅仅是访问,没有改动)

2017-03-18 20:04:14 550

原创 Linux -->在目录内创建文件、显示文件以及拷贝文件到一个目录都需要什么权限?

1、首先,我们来看一下在目录内创建文件需要什么权限呢(1)我们在当前创建目录hhh,并且修改其属性为100,因为我们知道进入目录仅仅需要用户的可执行程序即可。

2017-03-15 21:44:20 4588

原创 进入某个目录需要什么权限

作为刚刚接触Linux的小白,学习了一些简单权限和小命令后,我们来看一个简单的小问题。我们需要什么权限才能进入某个目录呢首先我们在普通用户下验证:1.先创建一个目录file1,看到其起始属性为775。2.然后我们将目录属性改为700,验证进入目录权限与所属组和other无关而只与拥有者user的三种属性有关。从上图可以验证我们的猜想,因为group和other的读写

2017-03-14 22:31:36 875

原创 C++ 模板

当我们在编写一个通用的加法时,首先我们会想到函数重载,就像下面这段代码int Add(const int left,const int right){ return left + right;}float Add(const float left,const float right){ return left + right;}int main(){ cout<<Ad

2017-03-10 19:01:11 239

空空如也

空空如也

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

TA关注的人

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