自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 centos6.5下如何搭建一个ftp服务器和使用客户端

一:搭建服务器:1.下载vsftpd软件:2.以root身份进入/etc/vsftpd目录:3.修改vsftpd.conf这个配置文件(千万记住不要在等号两边留空格)4.重启vsftpd服务:至此服务器端就搭建完毕了,就这么简单二:客户端使用:centos下ftp客户端需要自己安装,ubuntu下下载vsftpd默认装上了

2017-07-04 10:03:04 8759

原创 centos下如何安装rar和unrar软件

如果您的centos是32位的,执行如下命令wget http://www.rarsoft.com/rar/rarlinux-3.9.3.tar.gztar -zxvf rarlinux-3.9.3.tar.gzcd rarmake看见下面这些信息就是安装成功了:mkdir -p /usr/local/binmkdir -p /usr/local/libcp rar unrar

2017-07-03 23:13:38 404

原创 linux下gzip,bzip2,tar,zip,rar压缩与解压缩命令总结

1. 压缩包管理1>. 屌丝版:1). gzip -- .gz格式的压缩包(不会保留源文件   不会打包  gz结尾   不能压缩目录)2). bzip2 -- .bz2格式的压缩包(不会保留源文件(-k能保存源文件),不会打包   bz2结尾  不能压缩目录)2>. 高富帅版:1). tar -- 不使用z/j参数 , 该命令只能对文件或目

2017-07-03 22:34:22 359

原创 connect方法会阻塞,请问有什么方法可以避免其长时间阻塞?

步骤1: 设置非阻塞,启动连接实现非阻塞 connect ,首先把 sockfd 设置成非阻塞的。这样调用connect 可以立刻返回,根据返回值和 errno 处理三种情况:(1) 如果返回 0,表示 connect 成功。(2) 如果返回值小于 0, errno 为 EINPROGRESS,  表示连接      建立已经启动但是尚未完成。这是期望的结果,不是真正的错误。

2017-07-02 21:14:11 7633

原创 udp调用connect的作用总结

1:UDP中可以使用connect系统调用2:UDP中connect操作与TCP中connect操作有着本质区别.TCP中调用connect会引起三次握手,client与server建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.3:UDP中可以多次调用connect,TCP只能调用一次connect.UDP多次调用connect有两种用途:1,指定一个新的ip&

2017-07-02 20:42:07 1289

原创 linux下用c语言实现一个简单的线程池

首先大家思考一个问题:为什么需要内存池?我们知道应用程序创建一个对象,然后销毁对象是很耗费资源的。创建线程,销毁线程,也是如此。因此,我们就预先生成一些线程,等到我们使用的时候在进行调度,于是,一些"池化资源"技术就这样的产生了。1 线程池优点下面使用网上资源验证线程池如何提高服务器性能的。多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单

2017-06-23 21:08:54 3973 3

原创 反引号与$()的区别以及eval的作用

$( )与` `(反引号)在bash shell中,$( )与` `(反引号)都是用来做命令替换(command substitution)用的。命令替换:echo pwd  这里的pwd就是一个字符串不是命令,所以输出的就是pwd这个字符串,$()和反引号将字符串解释成命令了,用$( )的理由1. ` `很容易与' '(单引号)搞混。有时在一些

2017-06-22 00:39:48 1246

原创 shell脚本基础知识

shell脚本 入门 —— 符号篇shellShell就是一个命令行解释器 ,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。Shell还有一种执行命令的方式称为批处理 (Batch),用户事先写一 个Shell脚本 (Script),其中有很多条命令,让Shell一次把这些命令执行完,而不

2017-06-21 17:41:42 245

原创 STL之deque源码剖析

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点。vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间。但是其在分配的内存不够的情况下,需要对容器整体进行重新分配、拷贝和释放等操作,而且在vector中间插入或删除元素效率很低。而list是以节点形式来存放数据,使用的是非连续的内

2017-06-17 16:53:22 613

原创 STL之list源码剖析

List概述List和Vector都是STL的序列式容器,唯一不同的地方就在于:Vector是一段连续的内存空间,List则是一段不连续的内存空间,相比于Vector来说,List在每次插入和删除的时候,只需要配置或释放一个元素空间,对于任何位置的插入和删除操作,List永远能做到常数时间。但是,List由于不连续的内存空间,导致不支持随机寻址,所以尺有所长寸有所短,在程序中选择使用那

2017-06-17 16:43:15 363

原创 mmap映射区和shm共享内存的区别总结

linux中的两种共享内存。一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数)在说mmap之前我们先说一下普通的读写文件的原理,进程调用read或是write后会陷入内核,因为这两个函数都是系统调用,进入系统调用后,内核开始读写文件,假设内核在读取文件,内核首先把文件读入自己的内核空间,读完之后进程在内核回归用户态,内核

2017-06-13 11:45:24 26045 12

原创 I/0多路复用 select、poll、epoll之间的区别总结

select()和poll() IO多路复用模型select优点:1.一次可以等待多个文件描述符,减少了平均等待时间2.客户越来越多时,减轻了进程调度的压力(相较于多进程多线程服务器)select缺点:1.能监听的文件描述符有上限,这个上限是由fd_set决定的。2.它返回的只是就绪事件的个数,要判断是那个事件满足,需要遍历文件描述符。3.select监听的集合是输

2017-06-12 22:34:59 2722

原创 I/O多路复用之poll

pollpoll和select类似,不过在一些方面改善了select的弊端。它也是在指定的时间进行轮询文件描述符,查看是否有就绪时间发生。和上次一样,我们先来看一下poll系统调用。 int poll(struct pollfd *fds, nfds_t nfds, int timeout);11fds是一个pollfd的结构体数组。struct pollfd

2017-06-12 16:10:35 261

原创 I/0多路复用之epoll

epoll介绍epoll的实现和select与poll的实现有很大的差异,epoll不像select和poll一样通过一个系统调用来完成任务,通过一组函数,epoll把用户关心的文件描述符的事件放在内核的一个事件表中,这样就不用每次都进行向内核传递文件描述符了。epoll使用一个额外的文件描述符来表示内核的事件表,所以这里第一个函数epoll_create就是做这个的。epol

2017-06-12 14:41:02 288

原创 mmap实现多进程对大文件拷贝

实现文件多进程拷贝。假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为len,共有n个进程对该文件进行拷贝。那每个进程拷贝的字节数应为len/n。但未必一定能整除,我们可以选择让最后一个进程负责剩余部分拷贝工作。可使用len % (len/n)将剩余部分大小求出。为降低实现复杂度,可选用mmap来实现源、目标文件的映射,通过指针操作内存地址

2017-06-11 22:50:28 1118 1

原创 Linux 多线程同步之哲学家用餐问题分析

有五个哲学家公用一张餐桌,分别坐在周围的五张椅子上,在餐桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和用餐。平时,一个哲学家进行思考,饥饿时便试图拿取其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐,进餐完毕,放下筷子继续思考。思路:选用互斥锁mutex,如创建5个, pthread_mutex_t m[5];模型抽象: 5个哲学家 --> 5个线程;5支筷子 -

2017-06-11 19:55:07 2782 1

原创 I/O多路复用之select函数

select介绍我们先来看一下select的接口。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);1234512345从上面的这些接口我们应该能有写认识,首先我么来看s

2017-06-07 16:24:46 372

原创 守护进程的实现

守护进程也叫做精灵进程,是运行在后台的一种特殊的进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。生存周期长,它们常常在系统引导装入的时候启动,仅仅在系统关闭的时候才终止。因为它们没有控制终端,所以说它们是在后台运行的。很多服务器的应用都和守护进程相关守护进程的特点: 守护进程启动后没有控制终端,不能直接和用户交互。 守护进程不受用户登录注销的影响。只受开机关机的

2017-06-04 17:20:03 478

原创 使用socketpair⽤来创建双向通信的管道

#include#include#include#include#include#includeint main(){ pid_t pid; int fd[2]; socketpair(AF_UNIX,SOCK_STREAM,0,fd); pid = fork(); if(pid < 0) { perror("fork"); exit(1); } els

2017-06-02 23:54:32 320

原创 socket之TCP多线程客户服务器编程

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include#include#includestatic void usage(const char *str){ printf("Usage:%s [IP][PORT]\n",str);}static int start

2017-06-02 23:46:17 416

原创 socket之tcp多进程客户服务器编程

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include#includestatic int startup(const char *_ip,int _port){ int sock = socket(AF_INET,SOCK_STREAM,0); if(sock < 0

2017-06-02 23:34:33 381

原创 socket编程之udp客户服务器

实现基于udp的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include//#include#includestatic void usage(const char * str){ printf("Usage:%s [IP] [PORT]\n",str);}// ./server

2017-06-02 23:23:27 368

原创 socket编程之TCP单进程客户服务器

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器代码:#include#include#include#include#include#include#include#includevoid usage(const char *str){ printf("%s [IP][PORT]\n",str);}//./serv 127.0.0.

2017-06-02 23:07:11 1071

原创 map/set/multi_map/multi_set/unorder_map/unorder_set总结

map/set/multi_map/multi_sep底层实现是加头节点的红黑树,元素之间有序,当存放的是自定义类型的时候要重载operatormap存放的是键值对,,key唯一,value可以重复,不能修改key的值,可以先删除旧的值,再添加新的值,value的值可以修改。set用户存放的是值,但是底层存放的仍能存放的是键值对,只不过key=value,同样的值是唯一的,不能随便修改va

2017-05-19 23:24:25 603

原创 红黑树(RBTree)的实现

红黑树的特点:1、任意一个结点要么是红色,要么是黑色2、根结点是黑色3、一条路径上不能出现两个连续的红色结点4、从根节点到任一叶子节点的黑色结点个数相同5、NUL结点默认为黑色结点(可忽略)插入实现注意:cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点【情况一】cur为红,p为红,g为黑,u存在且为红则将p,u改为黑,g改为红,然后把g当成c

2017-05-19 18:59:00 325

原创 TCP报文首部、三次握手与四次挥手以及四种定时器解析

关于TCP协议是网络中很重要的一个协议,这个协议自然需要好好看看。我们从TCP的首部来一点一滴的深入理解这个协议。1. TCP首部介绍源端口(source port)16位的字段,定义了发送这个报文段的主机中的应用程序的端口号。 目的端口(destination port)16位的字段,定义了接收这个报文段的主机中的应用程序的端口号。 序列号(seque

2017-05-19 14:08:48 743

原创 TCP的端口分类

TCP的端口(用16位端口号来标示一个端口)注意:端口只具有本地意义,只是为标志本计算机应用层中的各个进程在和运输层交互时的层间接口,在因特网上不同主机中,相同的端口号没有关联。由此可见,两个计算机的进程要互相通信,不仅必须知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)TCP的端口号可分为两大类:1、服务器端使用的端口号(

2017-05-19 12:32:23 3948 1

原创 常见的路由条目生成算法

前言:路由:数据包从源地址到目的地址所需要经过的路径,由一系列节点组成。 路由节点:一个具有路由功能的主机或者路由器,维护一张路由表,通过查询路由表来决定向那个节点发送数据包。 路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接收和发送,其中最后一个是缺省路由条目。 路由条目:路由表中的每一行,每个条目主要由网络地址、子网掩码、下一跳地址、发送接收四部分组

2017-05-18 22:58:03 2704

原创 代理服务器和网络地址转换NAT

NAT(网络地址转换)工作在网络层,对数据包进行地址转换后再转发。解决网络地址不够用,通过隐藏局域IP地址来保护网络安全。NAT路由器(需要装入NAT软件的路由器),至少有一个有效的外部全球IP地址,所有使用本地地址主机(局域网内192.168.0.0所有主机的IP地址都是本地IP地址192.168.x.x)和外网通信时都要在NAT路由器上将其本地地址转换成全球IP地址,才能与因特网连接。

2017-05-18 21:54:20 1775

原创 计算机网络之ARP协议

引言ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为MAC地址(物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址),但是仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送。因此发送方还需要有接收方的物理地址,也就需要一个从IP地址到物理地址的映射,ARP

2017-05-14 17:34:47 1764

原创 数据链路层三个问题---封装成帧、透明传输、差错检查

数据链路层:前言:数据链路层使用的信道主要有以下的两种类型: 1. 点对点信道。这种信道使用一对一的点对点信道方式。 2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。点对点信道的数据链路层在进行通信的时步骤如下: 1. 节点A的数据链路层把网络层交下来的IP数据报添加首

2017-05-14 16:08:22 13299

原创 程序员面试金典--面试34之加法运算替代

题目描述请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。给定两个正整数int a,int b,同时给定一个int type代表运算的类型,1为求a * b,0为求a / b,-1为求a - b。请返回计算的结果,保证数据合法且结果一定在int范围内。测试样例:1,2,1返回:2思路:减法直接使用补码变为加法:按位取反+1,要看清题目

2017-05-14 13:22:15 395

原创 程序员面试金典--判断直线相交

题目描述给定直角坐标系上的两条直线,确定这两条直线会不会相交。线段以斜率和截距的形式给出,即double s1,double s2,double y1,double y2,分别代表直线1和2的斜率(即s1,s2)和截距(即y1,y2),请返回一个bool,代表给定的两条直线是否相交。这里两直线重合也认为相交。测试样例:3.14,3.14,1,2返回:false思路:

2017-05-14 13:18:50 389

原创 程序员面试金典--面试32之碰撞的蚂蚁

题目描述在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞)给定一个int n(3测试样例:3返回:0.75思路:每个顶点连着两条边,所以一只蚂蚁有两种选择,可以随意的走一条边,n只蚂蚁有2^n种路线,但是只有每只蚂蚁走不同的边才不会碰撞,所以有顺时针和逆时针两种安全走法,其他的走法都

2017-05-14 13:14:21 354

原创 程序员面试金典--面试31之像素设定

题目描述有一个单色屏幕储存在一维数组中,其中数组的每个元素代表连续的8位的像素的值,请实现一个函数,将第x到第y个像素涂上颜色(像素标号从零开始),并尝试尽量使用最快的办法。给定表示屏幕的数组screen(数组中的每个元素代表连续的8个像素,且从左至右的像素分别对应元素的二进制的从低到高位),以及int x,int y,意义如题意所述,保证输入数据合法。请返回涂色后的新的屏幕数组。测试

2017-05-14 13:08:04 410

原创 程序员面试金典 --面试30之找出缺失的数

题目描述数组A包含了0到n的所有整数,但其中缺失了一个。对于这个问题,我们设定限制,使得一次操作无法取得数组number里某个整数的完整内容。唯一的可用操作是询问数组中第i个元素的二进制的第j位(最低位为第0位),该操作的时间复杂度为常数,请设计算法,在O(n)的时间内找到这个数。给定一个数组number,即所有剩下的数按从小到大排列的二进制各位的值,如A[0][1]表示剩下的第二个数二进

2017-05-14 13:03:00 383

原创 程序员面试金典 -- 面试29之交换一个数的二进制的奇数位和偶数位

题目描述请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例:10返回:5思路:用这个数与0xAAAAAAAA相与,拿到偶数位,左移一位,变成奇数位,在拿这个数与0x55555555相与,拿到奇数位,右移一位,变成偶数位,奇数位和偶数位相加就变成新的数了。#includeusing names

2017-05-14 12:58:03 393

原创 程序员面试金典--面试28之改变几个位,才能将整数A转变成整数B。

题目描述编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。给定两个整数int A,int B。请返回需要改变的数位个数。测试样例:10,5返回:4思路:这道题其实意思就是让你找出两个数有几个位不同,我们先用异或再看这两个数异或后的结果二进制有几个1,则说明要改变几个位。#includeusing namespace std;int CalcCo

2017-05-14 12:53:06 340

转载 c语言--堆栈的区别

原文:http://student.csdn.net/link.php?url=http://www.top-e.org%2Fjiaoshi%2Fhtml%2F427.html格式和部分内容稍作修改。在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识

2017-05-07 14:58:37 288

原创 程序员面试金典--面试27之有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数

题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]思路:这道题没想到什么好办法,只想到了暴力法,先判断这个数二进制有几个1,然后前面那个数从x-1开始试,后面那个数从x+1开始试,看那个数的二进制中

2017-05-06 00:23:33 1371 1

空空如也

空空如也

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

TA关注的人

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