- 博客(41)
- 收藏
- 关注
原创 shell进度条的编写
以下是shell脚本编写的两个版本的进度条,在第二个版本中实现了颜色的变换在第二版本中补充一下颜色的相关知识:颜色:0黑色,1红色,2绿色,3黄色,4蓝色,5洋红,6青色,7白色格式:\e[显示方式;前景色;背景色m输出字符串\033[0m,m表示设置属性并结束转义序列显示方式:0默认,1粗体/高亮,22非粗体,4单条下划线,24无下划线,5闪烁,25无闪烁,7反显
2017-07-05 09:19:34
289
原创 epoll服务器
epoll服务器一、相关接口的认识1.创建epoll句柄 创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必
2017-07-05 08:40:55
334
原创 poll服务器
一、poll函数的认识fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于socket连接比较多的情况下,在一定程度上可以提高处理的效率;这一点与select()函数不同,调用select()函数之后,select()函数会清空它所检测的socket描述符集合
2017-07-02 14:54:05
289
原创 select服务器
一、select函数认识 nfds:是需要监视的最大的文件描述符的值加1。 readfds:(可选)指针,指向一组等待可读性检查的套接口。 writefds:(可选)指针,指向一组等待可写性检查的套接口。 exceptfds:(可选)指针,指向一组等待错误检查的套接口。 timeout:select()最多等待时间,对阻塞操作则为NULL。
2017-07-02 14:35:32
295
原创 shell符号之 eval `` $()
在shell中有关于命令代换的三条命令,分别是 eval `` $() ,今天来分别认识一下这三个命令代换。先来看一个不使用命令代换的例子从这个例子可以看出,不适用命令代换打印的结果就是一个字符串。一、命令代换之 ``结果很明显显示出了当前的时间日期。shell先执行由反引号括起来的一条命令,然后将输出结果立刻代换到当前命令行。二、命令代换
2017-07-01 15:35:41
402
原创 基于UDP协议的服务器/客户端
基于UDP协议的客户端/服务器是不可靠的,无连接的,所以相比于TCP来说,服务器端就不需要listen和accept操作,而客户端也就不需要connect操作。先来认识一下UDP socket里的两个函数:sockfd就是创建的套接字,buf就是用来存数据的缓冲区,len就是发送和接收数据的长度,flags参数一般设置为0表示阻塞式等待,src_addr表示从哪里接收数据报
2017-06-24 17:39:56
2460
原创 基于TCP协议的客户端/服务器
在以下的客户端/服务器程序实例中,TCP_server.c的作用是接受client请求,并与client进行简单的数据通信,整体为一个阻塞式的网络聊天工具。TCP_client.c的作用是链接server,并向server发起通信请求。在看代码之前来认识几个socket API。domain指明了协议族/域,通常AF_INET、AF_INET6、AF_LOCAL等,对于IPV4采
2017-06-23 16:00:10
387
原创 关于TCP
TCP——传输控制协议先来看看它的报文格式:我先来简单介绍一下TCP这个协议,关于TCP最主要的特点主要有以下几点:1. TCP是面向连接的运输层协议;2. 每一条TCP连接只能 有两个断点,每一条TCP连接只能是点对点的;3. TCP提供可靠交付的任务,即TCP传送的数据无差错,不丢失,不重复,并且按序到达;4. TCP提供全双工的通信;5. TCP是面向字节
2017-06-20 15:48:45
307
原创 搜索结构之哈希
哈希表是根据哈希函数确定每个关键码在表中的存储位置,处理哈希冲突会有开散列法和闭散列法:闭散列法:运用顺序表存储,存储效率高,但容易产生堆积,查找不易实现,需要用到二次探测;开散列法:运用单链表存储方式,不产生堆积现象,但因为附加了指针域增加了空间开销。二者具体的实现方法如下:闭散列法:#include#include#includeusing namespace std
2017-06-15 00:17:32
272
原创 关于端口
一、端口的定义"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。二、端口分类硬件端口:
2017-06-13 00:17:35
440
原创 NAT技术与代理服务器
一、NAT技术 NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址
2017-06-12 23:49:25
372
原创 关于arp脚本
在网络层我们知道有一个地址解析协议ARP,在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出其相应的物理地址;或者反过来,已经知道了物理地址,需要找出相应的IP地址。地址解析协议ARP和逆地址解析协议RARP就是用来解决这样的问题的。我们今天主要来看看ARP协议。一、什么是ARP协议? 我们知道,网络层使用的是IP地址,但在实际网络的
2017-06-11 16:26:03
393
原创 CRC校验
今天我们的主题是——CRC校验一、什么是CRC校验? 在MAC帧格式中最后有4个字节是CRC校验,究竟什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。二、如何校验? CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进
2017-06-11 00:14:41
668
原创 守护进程
我们今天来谈谈守护进程那些事~~~一、什么是守护进程 守护进程也称为精灵进程,它是在后台运行的一种特殊进程,它独立于控制终端,自成进程组,自成会话,它在后台周期性地执行某种任务或者等待某种事件的发生。 在Linux中,操作系统与用户的交流是通过终端来联系的,从此开始运行的进程都与这个终端关联起来,一旦这个终端关闭了,运行的进程也就随之关闭了,但是守护进程
2017-06-08 00:04:35
264
原创 作业规划进程crond
今天我们来看看如何使用作业规划进程crond完成一个定时任务。一、什么是crond作业规划进程 crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。就像我
2017-06-07 00:31:00
301
原创 使用gdb调试多进程多线程程序
今天我们来谈谈如何使用gdb调试多进程和多线程程序??? 其实gdb本身没有对多进程程序调试提供直接支持。例如,使用gdb调试某个进程,如果该进程fork了子进程,gdb会继续调试该进程,子进程会不受干扰地继续运行下去。如果我们事先在子进程代码里设定了断点,子进程会收到SIGTRAP信号并终止。所以我们可以通过去子进程设置断点,再通过step与continue交替运行
2017-06-05 23:36:14
591
原创 Linux信号3
在信号的前两个博客中分别写到了信号的产生于信号的阻塞相关内容,接下来我们今天来看看信号的捕捉!问:何为信号的捕捉?一、定义 如果信号的处理动作是用户自定义的信号处理函数,当信号递达的时候就去执行这个用户定义的处理动作,就叫做 信号的捕捉。二、sigaction函数 第一个跟信号捕捉有关的函数就是sigaction。 调用成功时返回0,错误时返回-1,第一
2017-04-29 18:35:32
433
原创 Linux信号2
3.由软件条件产生信号 alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发送SIGALARM信号,该信号的默认处理动作是终止当前进程。返回值是0或者上次设定的闹钟余下的秒数,当seconds为0时表示取消该闹钟。4.阻塞信号信号递达:实际执行信号的处理动作成为信号递达。信号未决:信号从产生到递达之间的状态称为信号未决。被阻
2017-04-19 16:18:18
273
原创 Linux信号1
一、信号基本概念。 信号简单的来说它就是以中国通知机制,它是为了响应某个事件而产生的,接收到相关信号的进程就会去执行对应的动作。接收到信号的进程会先在自己的PCB中记下相关信息,等到合适的时候去处理这个信号。可以使用kill -l命令查看当前系统定义的信号列表:二、信号产生的条件1.用户在终端按下某些键时,终端驱动程序会发送信号给前台进程。2.硬件异常产生信号,
2017-04-19 15:55:18
366
原创 数据结构——queue
一、定义 queue队列只允许在一端进行插入数据操作,在另一端进行删除操作。二、分类1.顺序队列实现方式一:对头不动,出栈的时候对头后的所有元素向后移动。实现方式二:出队列时,对头向后移动一个位置。第二种顺序队列会出现一种“假溢出”的行为——队列中还有存储空间,但是已经不能再入队了。2.循环队列:解决假溢出的方法就是使用循环队列,即头尾相接队列的判空判
2017-04-17 23:21:19
394
原创 数据结构——stack的实现
一、定义 栈stack是一种限定在仅仅只能在尾部进行插入删除的线性表。允许进行插入删除的一端叫做栈顶,而另一端就叫做栈底。二、栈的分类1. 顺序栈:所有操作的时间复杂度均为O(1);2. 共享栈:两个栈共享一段空间向中间靠拢;3. 链式栈:它的Push和Pop操作是头插法。三、栈的模拟实现在其中我还运用了类型萃取。#include#includeus
2017-04-17 23:05:06
367
原创 数据结构——递归
一、递归的一般定义 所谓递归,通俗来说就是函数自己调用自己的过程,但是要明确的一点是,递归一定要有自己的出口,要不然就会陷入一种“无法自拔”的境地!!!二、递归的用处 递归一般用于解决三类问题: 1.数据的定义是按照递归定义的(斐波那契); 2.问题解法按照递归算法解决(回溯); 3.数据的结构形式按照递归定义的(树的遍
2017-04-17 22:49:19
560
原创 线程间同步与互斥——读写锁
在编写多线程时,有些公共数据修改的机会比较少,相对比较写它们读的机会返回很多,在读的过程中往往伴随查找的操作,中间耗时很长,给这种代码加锁反而会降低我们的效率,有一种方法专门处理这种问题,那就是——读写锁。 读写锁是一种特殊的自旋锁,它把对共享资源的访问者划分为读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。 自旋锁是专门为防止多处理器并发而
2017-04-05 23:39:05
379
原创 线程同步与互斥——信号量
关于信号量,我们在前面进程间通信也谈到过,今天我们再来看看使用信号量实现线程间的同步与互斥问题。再来说说什么是信号量? 信号量的使用主要用来保护共享资源,使该资源在一个时刻只有一个进程(线程)所拥有。在线程中的semaphore变量的类型为sem_t。我们先来了解一下信号量的操作函数。 sem_init()用来初始化一个信号量,sem_t *sem是自己
2017-04-05 22:58:23
1247
原创 线程的同步与互斥——条件变量
线程间的同步与互斥技术,主要以互斥锁和条件变量为主,条件变量和互斥锁的配合使用可以很好的处理对于条件等待的线程间的同步问题。我们先来认识几个关于条件变量的函数:和Mutex的初始化和销毁类似,pthread_cond_init用来初始化一个条件变量,attr参数为NULL,表示属性为缺省值。pthread_cond_destroy表示销毁一个条件变量。如果条件变量是静态分配的,
2017-03-30 00:21:49
362
原创 线程的同步与互斥(上)
当多个线程同时访问共享数据时就会有冲突,我们就需要控制访问数据的线程,解决的办法在这里是引入——互斥锁。互斥锁即Mutex,获得锁的线程可以完成自己的操作,然后释放锁给其他线程,没有获得锁的线程只能等待而不能访问共享数据。当我们创建两个线程,各自把count增加5000次,正常情况下最后count应该等于10000,但事实上每次运行该程序的结果都不一样,有时候5000多,有时候又是6000
2017-03-22 23:40:44
166
原创 线程控制
今天我们来看看有关进程控制方面的知识:第一,我们来看看几个有关线程的函数:A.创建进程返回值:成功就返回0,失败就返回错误码。thread: 参数是一个指针,当线程成功创建时,返回创建线程ID。attr: 用于指定线程的属性start_routine: 该参数是一个函数指针,指向线程创建后要调用的函数。arg: 传递给线程函数的参数。B.终止线程re
2017-03-22 22:44:55
168
原创 共享内存
一、什么是共享内存 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。 采用共享内存通信的一个显而易见的好处是效率高,因为
2017-03-16 11:15:12
263
原创 模板函数
我们来看看关于模板函数的内容:先来看看如何编写一个通用的加法函数:#includeusing namespace std;int Add(const int &left, const int &right){ return (left + right);}float Add(const float &left, const float &right){ return (l
2017-03-16 09:18:41
269
原创 多态中的模型
一、虚表关于什么是虚表?我们通过一段代码来认识一下虚表:#includeusing namespace std;class Base{public: Base()//普通构造函数 { _b = 1; }protected: int _b;};int main(){ cout << sizeof(Base) << endl; system("pause")
2017-03-15 00:12:16
239
原创 信号量
一、信号量的解释 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源标识。信号量在此过程中负责数据操作的互斥、同步功能。 当请求一个使用信号量来表示的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求,等于0,无资源可用,进程会进入睡眠状态直
2017-03-14 14:55:14
464
原创 关于继承
一、什么是继承 继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。产生的新类,称为派生类。 继承定义的格式:class Deriveclassname:acess-lable BaseClassName Deriveclassname:派生类的类名 acess-lable :继承类型,分为private,p
2017-03-08 17:01:02
456
原创 管道容量的验证
一、管道的容量查看我的内核版本:通过ulimit -a可以查看到:pipe size (512 bytes,-p) 8通过下面这条命令可以查看到 PIPE_BUFFERS(16),即可以计算出管道的容量为:512*8*16=65
2017-03-08 14:31:44
344
原创 关于atexit,Linux中的t权限,Linux中的FILE结构体
关于“atexit函数”,“Linux中的t权限”,“Linux中的FILE结构体”的介绍一、关于atexit函数 atexit函数包含在头文件:#include中 ,功 能: 注册终止函数(即main执行结束后调用的函数) ,用 法: int atexit(void (*func)(void)),atexit()函数来注册程序正常终止时要被调用的函数,在一个程序中最多可以用
2017-02-19 21:21:48
282
原创 关于类的6个默认成员函数
关于类的6个默认成员函数一、前言知识1.this指针a.this指针式一个指针,它时时刻刻指向一个实例;b.this指针的类型是:类类型* const;c.this指针并不是对象本身的一部分,不影响sizeof的结果;d.this指针是类成员函数的第一个默认隐含参数,编译器会自动维护和传递;2.引用a.引用不是新定义一个变量,而是给已存在的变量取了一个别名,所以编译器
2017-02-18 22:48:19
247
原创 进程调度算法
一、进程调度概念 进程调度,用户进程数进程调度一般都多于处理机数、这将导致它们互相争夺处理机。无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。二、两种占用CPU的方式a.可剥夺式 (可抢占式):就绪队列中一旦有优先级高于当前执行进程优先级的进程存在时,便立即发生进程调度,转让处理机。b.不可剥夺式 (不可抢
2017-02-18 21:56:12
511
原创 task_struct各字段介绍
task_struct各字段介绍 task_struct是Linux中的【进程控制块PCB结构】的具体数据结构这个结构体包含了一个进程所需的所有信息。下面对task_struct这个结构体 进行各个字段的详细介绍1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RUNNING:正在运行或在就绪队列run-queue中准备运
2017-02-18 09:46:05
784
原创 进度条小程序
Linux下的进度条程序1.回车和换行的区别:回车用\r表示,换行用\n表示,回车表示回到当前行的开始地方,而不会到下一行,如果是要接着输出的话,本行以前的内容会被逐一覆盖掉。而换行指的是换到当前位置的下一行,而不会回到行首。2. IO的三种缓冲机制:我们可以看到进度条是通过pr
2017-02-16 23:11:59
1607
原创 CentOS 6.5下vim的配置
CentOS 6.5版本下vim的配置1.创建.vim以及.vimrc的文件2.用su操纵切换到根目录下再进行下面的操作3.简单地为.vimrc写入内容,设置vim格式输入命令:$ wget http://files.cnblogs.com/ma6174/vim
2017-02-15 23:45:17
1129
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人