自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux文件的硬链接与软连接

Linux文件系统下有两个特殊的文件,分别叫硬链接文件和软连接文件。硬链接文件是一种引用计数的运用,软连接可以理解为Windows下面的快捷方式。硬链接硬链接的实质就是通过文件的inode节点进行连接。我们都知道,Linux下每个文件都对应一个inode结点,都有一个单独的inode编号。而硬链接不同,每一个硬链接的inode都与源文件相同。假设我对文件A建立了一个硬链接文件B,此时B的inode编

2017-04-24 13:08:29 3341

原创 【Linux】inode信息详解

inode介绍要理解inode,就先要理解文件的存储方式。我们都知道,文件是存储在硬盘上的。硬盘的最小单位是扇区,每个扇区的大小为512字节。 如果系统在读取硬盘数据的时候按扇区一个一个来读取,那效率就太低了,而是一次连续性读取多个扇区,所以设计者又将多个扇区整合成一个块(block),所以,块就是文件存取的最小单位。一个块的大小为4k。 我们现在已经有了块的概念,文件数据就是存放在块中。但光有

2017-04-23 21:44:00 6641

原创 【项目】简易http服务器流程图分析

看这篇博客前先看-http协议基础知识总结:http://blog.csdn.net/llzk_/article/details/70513739http服务器是基于C/S模式(客户端/服务器),应用层使用http协议,传输层使用TCP协议。基本框架如下: 本http服务器规格如下: 1、使用HTTP1.0版本协议 2、仅处理GET和POST两种请求 3、使用短连接逻辑流程图参照代码阅读:代

2017-04-23 18:31:36 4674

原创 http协议基础知识总结

协议特点1、基于请求和响应客户端向http服务器发起一次请求,服务器对请求做出响应,一来一回。2、无连接无连接是指在应用层无连接,限制每次连接只处理一次请求,也就是说客户发起请求,服务器做出响应。连接即终止。这么做的原因是http是基于互联网的。服务器可能同时面对数十万,百万的请求。由于请求具有瞬时性,突发性。网页浏览具有联想性等等。造成相邻两次请求之间的关系可能不大。如果采用长时

2017-04-23 16:53:58 3089 3

原创 Linux常用文本编辑工具及常用指令

以下工具的使用都是建立在会简单使用正则表达式的基础上,不了解的群攻自己做功课。sedsed是一种流式编辑器,是一种文本编辑工具,以行为单位进行文本操作。sed默认按照basic规则进行匹配。 常用的命令格式如下:sed option '/pattern/action' filepattern:为一个正则表达式,用来匹配所要操作的字符串行。action:是操作方法。常用的操作方法有:p,将匹配到的

2017-04-22 20:45:58 8634 1

原创 【shell】Here文档自动生成Makefile

在shell脚本程序中向一条命令传递输入的一种特殊方法就是使用Here文档,它允许一条命令在获得输入数据时就好像是在读取一个文件或者键盘一样,实际上是从脚本程序中得到输入数据。 here文档就是一段具有特殊目的的代码块,它使用I/O重定向的方式将一个命令序列传递到一个交互程序或者命令中。格式[命令] << [标识符]命令序列......[标识符]应用将命令序列传到另一个命令#/bin/ba

2017-04-10 15:34:53 1526

原创 syslog日志服务

syslog介绍syslog是一种标准工业协议, 也可以说它是一款服务,它可以用来记录UNIX主机系统设备的日志信息,也可以检测网络设备,如交换机,路由器等。syslog协议也可以实现机器间通信,继而分析这些网络日志行为,追踪和掌握设备与网络的状况。syslog所产生的日志不仅可以写往本地,也可以通过网络发送到接受syslog的服务器,实现统一的监控,接受syslog的服务器可以对

2017-04-10 12:55:16 7009

原创 shell的5个小程序

1、计算1+2+3+4....+100的结果:函数递归法:(参数从命令行传入)sum=0function fun{    if [ $1 -eq 0 ];then        echo $sum    else        let sum+=$1        fun $(($1-1))    fi}fun $1

2017-03-27 15:46:54 5562 1

原创 shell字符串大小写转换

1、typedet 有两个选项 -l 代表小写 -u 代表大写。用法:typeset -u namename='asdasdas'echo $nametypeset -l ameame='asdasdas'echo $ame结果:[lzk@localhost 33_class_3_26_shell]$ bash test.sh

2017-03-27 15:45:03 48345

原创 shell的字符串截取

1、#号截取格式:${var#*c}将截取后的字符串赋给a,#号是截取运算符,*号后跟提示字符c,表示将c之前的(包含c)的字符串都截取丢弃,保留剩下的。例:var='http://www.baidu.com'a=${var#*/}echo $a结果:[lzk@localhost 33_clas

2017-03-27 15:44:05 2415

原创 【笔试题】N进制数向M进制数转换

考虑的就是大于10的数都用字母表示,0~9有10个数字,再加上A~Z有26个字母刚好可以表示36进制数。再考虑就是大数问题,int表示不了怎么办,考虑用字符串。1、采取模N除N的方式,将原数字转换为10进制数。2、采用除留余数法,将数字转化为M进制数。3、逆置字符串。#include#includeusing namespace std;string* fun(

2017-03-23 22:06:56 3872 4

原创 【shell】反引号(`)与$()的作用与区别

linux下的反引号(`)和$()执行的是命令替换的功能。1、将命令的执行结果赋给一个变量反引号:DATE=`date` //变量=`命令`echo $DATE执行结果为:[lzk@bogon Signal_shell]$ sh -x myshell.sh++ date+ DATE='Wed Mar 22 22:43:08

2017-03-23 10:26:39 2628

原创 Linux常用指令-----ldd

今天面试被问到了,写个博客警惕下。很难受,这个指令我以前还学过。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。ldd —– list, dynamic, dependencies。 列出所有的动态依赖关系。ldd—-列出程序所使用的动态函数库的信息。ldd –version 列出ldd的版本号[root@bogon thread_tcp]# ldd --versionl

2017-03-20 22:00:52 1360

原创 I/O多路转换之select与select服务器

select高效的原因首先要知道一个概念,一次I/O分两个部分(①等待数据就绪 ②进行I/O),减少等的比重,增加I/O的比重就可以达到高效服务器的目的。select工作原理就是这个,同时监控多个文件描述符(或者说文件句柄),一旦其中某一个进入就绪状态,就进行I/O操作。监控多个文件句柄可以达到提高就绪状态出现的概率,就可以使CPU在大多数时间下都处于忙碌状态,大大提高CPU的性能。达到高效服务器的

2017-03-15 20:29:00 1046

原创 Tcpdump抓包工具

tcpdump工具选项-c +数字  -----指定要抓取包的数量,如果不指定数字,则会一直抓取直到输入Ctrl+c-nn -----直接以IP和端口号来显示,而非主机名和服务名称-w -----将抓取的数据包保存到指定的文件内。后面加文件名-i ----- 抓取指定网络接口的数据包,后面跟网络接口。-A----- 将抓取的数据包以ASCII的形式显示,一般

2017-03-10 20:17:53 1225

原创 NAT与NAPT网络地址转换

专用地址专用地址又叫可重用IP地址,为了节省全球IP地址,RFC 1918指明了一些专用地址,专用地址只能用于专用网(机构内部,本地网)内主机间的通信,并不能用于和因特网上主机的通信。在因特网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。IPV4的专用地址:10.0.0.0~10.255.255.255          1个A类172.16.0.0~172.31.25

2017-03-10 16:58:55 5835

原创 TCP协议首部分析

源端口和目的端口–> 各两个字节,用来表明源和目标。和UDP类似。 序号–>用来指定发送数据的编号。TCP的数据是按字节编号的,这里的序号就指本报文段数据的第一个字节的编号。 确认号–>用于向发送方发送确认信息,表示“我收到你发送的数据”,接收到数据的最后一个字节的序号加1 4位首部长度–>指报文段的首部的总长度。4位能表示最大数为15,一个单位为4字节,所以首部最大长度为4*15=60字节,

2017-03-10 13:16:58 1491

原创 TCP定时器的分类

重传定时器主要为了防止报文丢失或者阻塞。当A向B发送报文时,就会启动重传定时器,若在定时器到达之后,仍没有收到B的确认报文,则A会重新发送上次发送的报文。同时,令重传定时器复位。继续计时。坚持计时器此计时器针对下面场景: 当B向A发送了0窗口报文,B此时已经没有空间接受A发送的数据了,通知A停止发送。A在收到后即停止发送,等待一段时间后,B有了一些空间,可以继续接收了。此时再向A发送非0窗口报文。

2017-03-10 13:11:06 1344

原创 TCP的三次握手与四次挥手

参考资料《计算机网络》谢希仁为什么是三次握手?目的:防止已失效的连接请求又传到了服务器端。 场景(A为客户,B为服务器):A向B发送一个请求连接报文,但是这个报文在网络中阻塞了,并没有传到B。所以B也无法向A发送确认报文,在A的重传计时器到达之后,A再次向B发送请求连接报文,这个报文B收到了,并且向A做出应答,建立连接,传输数据。数据传输完后,关闭连接。问题来了,就在B关闭连接之后,A第一次发送的

2017-03-10 13:09:14 1165

原创 Linux进程间通信之共享存储

共享存储所谓共享存储,就是一块共享的内存区域,它可被多个进程以读或写的形式访问,以达到进程间通信的目的。 因为这个通信方式,发送端与接收端不需要来回复制要发送接收的信息,所以共享存储是最快的一种IPC(进程间通信方式)。 既然共享存储允许多个进程去访问,那么它必须满足同步与互斥原则,在发送端正在写的时候,接收端不应该去读。通常我们使用信号量或者互斥量来达到这一目的。共享内存同消息队列,信号量相同

2017-03-03 21:59:27 2220 1

原创 Linux进程间通信之消息队列

消息队列我们可以把消息队列理解为共享的消息链表,它存储在内核中,由消息队列标识符标识。消息队列传输数据的单位是有类型的数据块,这点与管道不同,管道的信息传输是基于字节流。 不同进程发送的数据块可被认为都有自己的类型,而接受端进程接受的数据块可以有不同的类型。 消息队列与管道相同的地方在于他们都是有限的。及既然他们都是一块共享的内存,那么他们必定有大小。 msgmax,每个消息的最大长度是有上限

2017-03-03 16:07:36 1316 1

原创 Linux进程间通信之管道

管道管道,你可以把它想成一根数据线,连接了两个进程,使他们可以互相通信。更严谨来说,它是一个文件或者一块共享区,一个进程往里面写数据,另一个进程从里面拿数据,以此种方式完成进程间通信。 管道是UNIX系统IPC最古老的形式,所有的UNIX系统都提供此种通信机制(UNIX系统IPC是各种进程通信方式的统称)。管道可分为两类:匿名管道,只能完成具有血缘关系间进程(或者说具有公共

2017-03-03 12:22:53 1034

原创 CRC校验算法

基本原理及概念CRC校验算法是在通信方面常用的一种差错检测的手段。原理是在将原始帧数据发送之前,在n个bit位的原始数据后面再加上通过特定运算得到的k位校验序列,组成新的帧再发送给接受端。接受端会根据原始数据后的校验序列再次进行特定运算,若结果正确,则接受;若结果错误,则丢弃。 我们将上面所述的k位校验序列称为帧检验序列FCS。 特定运算为多项式模2运算。(我更喜欢将它理解为异或运算)CRC

2017-03-02 18:11:35 4051

原创 Linux下gdb调试多线程

gdb调试多线程,目前我知道的就以下几条指令,当然编译的时候需要加-g选项。info threads 显示所有线程,系统会给每个线程都分配一个编号,编号前带“*”的,是当前正在调试的线程。 上图中LWP指的是轻量级进程,Linux下没有真正意义上的线程,所有的线程都是用进程模拟的。所以线程又叫轻量级进程。 __kernel_vsyscall(),是Linux系统调用的辅助机制,

2017-03-01 21:39:55 1556

原创 Linux例行性工作调度cron

什么是例行性工作?比如太阳每天从东方升起,学校的上课铃总是不厌烦的定时响起,老妈的喊叫声总在每天的固定时刻叫你起床等。这些都是例行性工作。Linux系统也有自己的定时要办的事情,比如日志文件的轮替,whatis数据库的建立等等。 Linux例行性工作分一次性的(at)和循环执行的(cron),本篇博客探讨的就是循环执行的例行性工作。 它主要分为两类:用户级用户想要建立自己的循环性工作调度时,使用

2017-03-01 16:45:43 3041 2

原创 Linux进程间关系之终端与终端登录

终端介绍在Linux/Unix系统中,用户总是通过终端登录系统后得到一个shell进程,进而在shell命令行上输入命令与系统进行交互。说白了,终端就是系统与用户进行“交流”的窗口,而所有在这个终端下创建的进程都“属于”这个终端。这个终端也就是这些进程的控制终端。 (控制终端是保存在PCB信息中的,而fork子进程会复制PCB中的信息。所以shell创建的所有进程的控制终端都是这个终端。) 我们

2017-03-01 13:05:05 4123

原创 Linux多线程编程(四)-----读写锁

概述读写锁类似于互斥锁(互斥量),不过读写锁允许更高的并行性,主要体现在读者方面。这种锁有利于读的机会多,写的机会少的共享数据。它可分为以下两种情况:写者竞争到锁资源。在写者加锁,正在写的情况下,所有试图竞争这个锁的读者写者线程都会被阻塞。读者竞争到锁资源。在读写加锁,正在读的情况下,为了体现并行性,当有新读者试图读取并且申请加锁的时候,将被允许。也就是说,一块共享数据可以同时被多个读者读取。但

2017-02-27 18:20:18 1287

原创 Linux进程间关系之守护进程

概念守护进程也称精灵进程,是运行在后台的一种特殊进程。守护进程独立于控制终端并且周期性的执行某种任务或者等待处理某些打算的事件。可认为守护进程目的就是防止终端产生的一些信号让进程退出特点所有的守护进程都没有控制终端,其终端名(TTY)设置为问号(?)。自成会话,自成进程组。不与其他会话或进程组相互关联,干扰。所以一般一个守护进程的进程ID,组ID,会话ID都相同。(自成进程组这点说的也不太严谨,

2017-02-27 16:05:56 4200

原创 Linux进程间关系之进程组,作业,会话与作业控制。

本片博客用到的相关指令fg,bg,jobs,ps等可自行查阅。进程组每个进程除了有一个进程ID之外还有一个进程组ID。每个进程都属于一个进程组。进程组是一个或多个进程的集合。每个进程都有一个唯一的进程组ID。每个进程都有一个组长进程。 组长进程标志:其所属进程组ID等于其进程ID。 进程组就是进程的集合,这些进程并不是孤立的,他们彼此之间或者存在父子、兄弟关系,或者在功能上有相近的联系。每个进程

2017-02-27 13:22:57 1540

原创 Linux信号(Signal)

信号的概念信号是操作系统正常运行一个必不可少的工具。正如我们生活中负责协调交通的红绿灯一样,若没有了红绿灯信号,那岂不是一幅人间大乱的场景。 每个信号都有一个名字,并且大写的英文字母,开头都是“SIG”。我们在Linux系统下可以调用kill -l指令来查看所有信号。 注意上图,所有信号的编号是从1到64,但是没有32,33。所以信号共有62个,我们将前31个信号称为普通信号,后31个称为实

2017-02-24 10:03:35 2140

原创 Linux多线程编程(三)-----生产者与消费者(条件变量,信号量)

Linux多线程编程(一):http://blog.csdn.net/llzk_/article/details/55670172 Linux多线程编程(二):http://blog.csdn.net/llzk_/article/details/55805851 在前两篇文章中我们探讨了线程的概念,同步与互斥概念以及互斥锁。本文将剖析一种操作系统中重要的模型—–生产者与消费者。其中会涉及条件变量

2017-02-22 21:02:27 4317

原创 Linux多线程编程(二)-----同步与互斥

Linux多线程编程(一):http://blog.csdn.net/llzk_/article/details/55670172 由上篇博客我们可以知道,多个线程是共享同一份内存的。这就意味着这么多线程共享同一份数据资源。这时就很可能出现多个线程因竞争同一份资源而发生冲突的问题。就算从程序不挂掉,运行结果也不会太正确。 例如,现在有两个线程A,B分别要对一个数据a = 5执行加1操作。正常来说

2017-02-19 17:10:40 1570

原创 Linux多线程编程(一)

什么是线程先来举一个我们生活中的实例,我们都使用过一个强大的软件—迅雷。那你必然知道迅雷有一个边下边播的功能,我们在下载的时候还能同时进行观看。这就是一个多线程实例。 线程是进程内部的执行分支。打开迅雷软件—–向系统内核索要资源,启动“迅雷”进程,。开始下载一个电影—–从索要的资源中调度分配一部分资源,启动下载线程。开始播放电影—–再索要的资源中调度分配一部分资源次从,启动播放线程。由上我

2017-02-18 19:25:22 2407 6

原创 Linux下的静态库与动态库

库在windows和Linux下都存在着大量的库,库是什么呢?本质上来说,库时一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有什么用呢?我们通常将一些公用函数写成函数库,所以库是别人写好的,现有的,成熟的,可以服用的代码,你可以使用但要必须得遵守许可协议。在我们现实开发过程中,不可能每一份代码都从头编写,当我们拥有库时,我们就可以直接将我们所需要的文件链接到我们的程序中。可以为我们节省大

2017-02-18 09:17:13 14200 6

原创 Linux进程间通信之信号量

信号量信号量,我们可以理解为一种计数器,记录的是可共享资源的数量。信号量主要被用于协调多个进程对同一共享资源的占用访问。 如果一个进程想要获得并使用共享资源,需经历以下过程:测试查看控制该共享资源的信号量。若该信号量的值大于0,则进程可以使用该资源。资源分配给该进程以后,信号量的值减1。表示该资源分配出去到了一个单位。若该信号量的值等于0,则该进程将被挂起,进入休眠等待状态。直到资源被释放,

2017-02-16 21:52:09 1027

原创 Linux下实现简单进度条

我们在使用计算机不免有拷贝文件或者下载文件的时候,总会看到行行色色的进度条,如下图的两种:下载文件: 拷贝文件: 在实现进度条之前首先要明白两个问题:回车与换行的区别printf的缓冲区问题可能你不明白为什么一个小小的进度条关这俩兄弟什么事,但请耐心往下看!回车与换行在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的东西,每秒钟可以打10个字符。但是它有一

2016-12-31 21:28:48 1126

原创 【Linux】Linux指令学习之find

find指令是我们在使用Linux系统时比较常用并且十分重要的一条指令。它的指令格式如下: find pathname [-options] [...] *** pathname:你要查找的目录[- options]:查找方式[…]:查找方式对应的查找条件***:搭配使用的指令options 查找方式(查找方式有很多,下面只剖析了几种常用的)-name 按照文件名进行查找 eg:

2016-12-30 20:18:19 1192

原创 Linux文件的三个时间参数atime,mtime,ctime;

在windows系统下查看过文件属性的朋友可能都知道,每个文件都有三个时间参数,分别为:创建时间、修改时间、访问时间。如图:同样的,Linux文件系统下对应每个文件也有三个时间参数,但与windows下略有不同,三个时间分别为:Access(atime):访问时间,指文件最后一次被访问的时间;Modify(mtime):修改时间,指文件内容最后一次被修改的时间。这里的文件内容指文件内的数据;C

2016-12-29 21:54:21 5797 3

原创 Linux环境变量及其设置

简介环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。分类根据环境变量的生命周期我们可以将其分为永久性变量和临时性变量,根据用户等级的不同又可以将

2016-12-22 17:33:20 35586 4

原创 STL迭代器的"特性萃取机"-----Traits

Traits就像一台”特性萃取机“,它可以毫无偏差的榨取各个迭代器的特性。在讲Traits之前,我们先要把迭代器的特性搞清楚。什么是迭代器的特性?迭代器的特性就是迭代器的型别,最常用的迭代器的5中种型别(这5种型别都为内嵌型别),每一种迭代器都有以下五种型的定义:1.value_type迭代器所指向对象的类型2.difference_type表示两个迭代器之间的

2016-12-17 21:49:30 2034

空空如也

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

TA关注的人

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