自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunnylunch-blog

介绍c/c++基础知识,介绍一些项目。

  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 shell脚本语法随笔

1、循环1.1、类C循环例:求1到100的和sum=0for ((i=1;i<=100;i++))do let sum+=idone1.2、for in循环例:输出参数列表所有参数for i in $@do echo $idone1.3、while循环例:求 1到100的和sum=0x=1while x<=100do let sum+=x

2017-03-27 22:42:45 900

原创 通讯录第四版

最近在看mysql,想起以前写过通讯录,所以就想着将通讯录中的内容存储到mysql中注意:下面出现的book是我的数据库中一张表的名字,它的字段是(name,tel,mail,addr)。根据情况自己替换 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<mysql.h>#define SIZE 1024MYSQL

2017-03-25 20:52:47 1320

原创 shell脚本执行过程

一、先看一个简单的脚本执行过程 shell脚本中以#表示注释。但是如果#位于第一行并且后面是感叹号,它表示该脚本使用后面指定的解释器解释执行。#!/bin/bash叫做shebang,它指定了解释器。 因为编写好的shell脚本文件是一个普通文本文件,所以我们要对它赋予可执行权限才可以执行。或者直接使用解释器对文本文件进行解释执行。 二、shell的执行过程 1、

2017-03-24 10:14:18 10092

原创 shell编程之符号与变量

一、shell特殊字符 1、一般通配符 2、模式表达式 3、引号 在shell中引号分为三种,单引号、双引号和倒引号。 3.1、双引号 由双引号括起来的字符(除$,倒引号(),和反斜杠(\)外),其余字符均视为普通字符。对这三种字符仍然保持特殊功能。$表示变量替换,倒引号()表示命令替换,反斜杠表示转移字符。 例:i=10; echo “i”输出:103.2、单引号由单引号括起来

2017-03-23 20:47:46 1324

原创 shell中的命令替换

在shell里面有倒引号”“”和$()两种命令替换方式: 如: 那么这两条命令有什么不同呢? 在多层次的复合替换命令中,倒引号需要加”\”转义,$()则不需要。 例:conmand1 conmand2conmand3。 原意是先执行conmand3,将结果交给conmand2处理,最后再将conmand2的结果交给conmannd1处理。 但实际由于两个倒引号进行了嵌套,最终将conma

2017-03-23 18:55:19 1176

原创 linux命令之eval

1、linux的eval命令用于重新运算求出参数的内容。 语法:eval cmdline 功能:eval会对后面的cmdline扫描两遍,第一遍扫描之后如果cmdline是个普通命令的话,则执行此命令。如果cmdline中含有变量的间接引用,用变量的值代替变量。 例1:变量i的值是”>”,用i进行重定向的话,结果如下: 可见,eval将间接引用解释成变量的值。 例2:使用eval可以创

2017-03-23 13:14:54 625

原创 linux下各目录含义

1、/ 根目录,系统中所有目录均是从根目录开始的。 2、/bin:bin是binary的缩写,该目录存放了使用则最常用的命令。 3、/boot:引导核心的程序目录,主要存放Linux Loader(Linux装配程序)LILO使用的各种文件。 4、/dev:dev是device(设备)的缩写,这个目录包含了Linux所有的外部设备名。 5、/etc:etc是etcetera(其他事项)的缩写

2017-03-23 13:11:53 943

原创 三种I/O复用方式的比较

select、poll、epoll这三组I/O复用系统调用都能同时监听多个文件描述符,他们都通过timeout参数指定要等待的时间。直到事件就绪时返回,返回值就是就绪的文件描述符的数量。下面我们从事件集、最大支持文件描述符数量,工作模式和具体实现方面比较一下他们的异同:1、事件集 select的参数没有将文件描述符和事件绑定,他仅仅是一个文件描述符的集合,所以select需要分别用三个参数

2017-03-21 12:09:23 1252

原创 I/O多路转接之epoll

一、epoll函数 epoll是linux特有的I/O复用函数,它比select和poll要高效的多。epoll用一个事件表来保存用户关心的文件描述符,但是这个事件表需要一个文件描述符来标识。1、内核事件表#include<sys/epoll.h>int epoll_create(int size);功能:创建一个事件表,并返回这个事件表的文件描述符。这个文件描述符就代表一个epoll模

2017-03-20 23:09:40 888

原创 I/O多路转接之poll

poll也是一种I/O多路转接的方式,select将三种事件进行了区分,并且用三个位图来表示不同的监测事件。而poll统一用一种结构来管理要监测的事件。#include<poll.h>int poll(struct pollfd* fds,nfds_t nfds,int timeout);参数: fds: 它是一个结构体数组,其中元素的类型如下: struct pollfd{ int fd

2017-03-17 11:04:16 809

原创 I/O多路复用之select简介

系统提供select函数用来实现I/O多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件描述状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生状态变化。通常I/O操作有两个步骤,一个是等,另一个是数据搬迁。select主要是在等的这个状态阻塞着直到事件发生。头文件:#include<sys/select.h>#include<sys/type

2017-03-15 22:54:02 935

原创 netstat命令

1、netstat是什么? netstat是在内核中访问网络相关信息的程序,它能够提供TCP连接、TCP和UDP监听、进程内存管理的状态。netstat也是一种控制台命令,是一个监控TCP/IP网络的非常有用的工具,他可以显示路由表、实际网络连接以及每一个网络接口设备的状态信息。使用netstat可以让用户知道有哪些网络连接正在运作,使用时如果不带参数,netstat显示活动的TCP连接。

2017-03-10 15:57:47 1064

原创 端口号的分类

1、什么是端口号 在一台主机上运行了多个服务,主机为了区分这些服务,所以给每个服务都分配一个端口号,端口号唯一的标识这台主机上的某个服务。 IP地址唯一标识网络上的一台主机,服务器用通过端口号来区分不同的网络服务。所以IP地址+端口号就表示网络中唯一的一个服务。 客户端通常对它所使用的端口号并不关心,只要保证该端口在本主机上是唯一的就可以了。所以客户端端口号又叫做临时端口号,

2017-03-10 15:51:31 2319

原创 tcpdump工具

一、什么是tcpdump wireshark是windows下面的抓包工具,tcpdump是linux下的抓包工具。tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持对网络层、协议层、主机、网络或端口的过滤、并提供and、or、not等逻辑帮你去掉无用的信息。二、tcpdump的使用 tcpdump的参数主要是用来过滤的,因为网络中流量很大,如果不加分辨将所有数据包都截留

2017-03-10 15:45:27 1452

原创 bind为什么会出现地址重用

1、在客户端服务器模式中,如果服务器退出,然后立即重新启动的话,然后就出现”试图绑定一个已经在使用的端口”的错误,要等过一段时间之后才可以bind,这是为什么呢??? 或许你感到非常迷惑,明明服务器的套接字已经被关闭了,但为什么仍然禁止绑定端口。这是由于套接字处于TIME_WAIT状态引起的,这个状态会持续2MSL时间。在TIME_WAIT退出后,套接字被删除,该地址才能被重新绑定而不出现

2017-03-10 15:40:44 1937

原创 为什么不建议客户端bind

1、为什么不建议对客户端进行bind? 首先要明确,客户端不是不能bind,他也可以bind,但是我们却不建议对客户端bind。 回想一下,服务器为什么要bind呢?因为服务器总是被动方,需要在一个众所周知的端口上等待连接请求,而且作为服务器它的端口号应该是固定的。服务器bind一个端口就表示会在这个端口提供一些特殊的服务。 而客户端它是主动发起方,我们并不关心是客户端

2017-03-10 15:36:37 4031

原创 TCP的可靠性体现在哪里

TCP提供一种面向连接的、可靠的字节流服务。我们都知道两个使用TCP的应用,必须先建立TCP连接才能进行数据通信。那么TCP都有哪些机制来确保可靠性呢??? 1、超时重传 发送一个报文段,会立即启动一个重传计时器,等待目的端口确认收到这个数据段。否则将超时重传。2、确认响应 对于一个收到的请求,将发送一个确认。这个确认通常要延迟几分之一秒。3、首部校验 TCP数据报文段中有收和数据的校验和。

2017-03-10 15:35:02 2655

原创 URG和PSH的区别

URG(紧急位):当URG=1的时候,紧急指针有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是从发送端向另一发送发送紧急数据的方式。数据从第一个字节到紧急指针所指字节就是紧急数据。数据段中的紧急数据不进入缓冲区就直接交给上层进程,而余下数据则要进入接收缓冲区。PSH(急迫位):PSH=1时,客户端发送给服务器的报文段立即被服务器TCP交付给应用进

2017-03-06 21:52:58 1350

原创 数据结构知识框图

数据结构知识框图:

2017-03-06 17:26:13 3263 4

原创 TCP连接和释放

一、TCP连接过程 1、TCP连接状态图 TCP的三次连接中,客户端是主动链接,服务器是被动连接,整个过程有三次数据报文段的传送,所以TCP建立过程又称为三次握手。 服务器进程先创建传输控制块TCB,准备接受接受客户进程的连接请求,然后服务器进程就处于LISTEN(收听)状态,等待客户端的连接请求。传输控制块TCB里面存储了每一个连接中的一些重要信息,比如:TCP连接表、到发送和接受缓

2017-03-05 22:03:03 3823 2

原创 距离向量算法

路由: 1、数据包从源地址到目的地址所经过的路径,由一系列路由结点组成。 2、某个路由结点为数据报选择投递方向的选路过程。路由结点: 一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口接口发送数据包。接口:路由结点与某个网络相连的网卡接口。路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后一条是缺省路由条目。路由条目:路由

2017-03-05 16:05:44 18019 1

原创 ARP地址解析协议

ARP:地址解析协议,用来将IP地址转化成MAC地址的。 在网络通信中,数据包首先被网卡接受到再去处理 上层协议,如果接受到的数据包的硬件地址与本机不符,则直接丢弃。所以当数据报到达目标网段后,需要知道目的主机的MAC地址才能通信。 到达目的网段后,源主机发出ARP请求,询问目的主机的MAC地址是多少,并将这个请求广播到本网段,目的主机以太网地址填写FF:FF:FF:FF:FF:

2017-03-05 16:02:34 1330

原创 TCP第四次挥手为什么要等待2MSL

当客户端进入TIME-WAIT状态的时候(也就是第四次挥手的时候),必须经过时间计数器设置的时间2MSL(最长报文段寿命)后,才能进入关闭状态,这时为什么呢??? 这最主要是因为两个理由:1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端

2017-03-05 15:58:52 10715

原创 TCP使用的四种计时器

TCP使用的四种计时器: 1、重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时器。 1.1、若在计时器截止时间到(通常60秒)之前收到了对此特定报文段的确认,则撤销此计时器。 1.2、若在计时器截止时间之前没有收到对此特定报文的确认,则就认为该报文丢失,需要重传此报文段,并将计时器复位。2、坚持计时器 假设TCP收到了一个窗口大小为0报文段,发送TCP就停止传送报文段

2017-03-05 15:53:11 3741 1

原创 LZ77压缩

在huffman压缩中,对于字符不再使用定长编码。我们利用字符出现的次数之间的差异,对字符重新进行编码,使得出现次数多的字符编码短,而出现次数少的字符编码长,这样的话整体来说,需要的总的bit位数就会下降,以此来达到压缩的目的。可见,在这种情况下,如果字符出现的次数大致都相等的话,就起不到压缩的效果了,这也就是huffman为什么不能进行二次压缩的原因,因为压缩一次之后,会使得所有字符出现的次数相差

2017-03-04 20:27:08 5165

原创 GDB多进程调试

多进程调试命令: 1、默认设置下,在调试多进程程序时GDB只会调试主进程。但是设置follow-fork-mode的话,就可调试多个进程。 set follow-fork-mode parent|child: 进入gdb后默认调试的是parent,要想调试child的话,需要设置set follow-fork-mode child,然后进入调试。当然这种方式只能同时调试一个进程。 show

2017-03-03 10:57:41 3420

原创 GDB多线程调试

多线程调试基本命令: info threads:显示当前可调试的所有线程,GDB会给每一个线程都分配一个ID。前面有*的线程是当前正在调试的线程。thread ID:切换当前调试的线程为指定ID的线程。thread apply all command:让所有被调试的线程都执行command命令。thread apply ID1 ID2 … command:让线程编号是ID1,ID2…等等的线程都执

2017-03-02 23:00:28 4853

C&&C++知识体系结构图

C,C++知识体系结构图

2016-09-09

空空如也

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

TA关注的人

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