自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xidianliusoftware的专栏

记录自己IT路上的点点滴滴

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

原创 virtual关键字用法总结

virtual关键字的作用:指示c++编译器对该函数的调用进行动态联编。只有当访问虚函数是通过基类指针s时才可以获得运行时的动态性。1. 在基类中,必须把成员函数定义为虚函数,即加关键字"virtual"2. 在派生类中,虚函数被重新定义时,其函数的原型与基类中的函数原型必须完全相同。3. 必须用指向基类的指针(或引用)访问虚函数,此时多态性才能实现。4. 虚函数作为动态联编的基础

2011-12-18 15:48:04 515

原创 =号运算符的重载

#include #include #include using namespace std;class A{public: A(char *s) {  ptr=new char[strlen(s)+1];  strcpy(ptr,s); } ~A() {  delete ptr; } void print() {  cout

2011-12-17 22:31:32 572

原创 普通函数重载和友元函数重载

#include #include #include using namespace std;class A{public: A(int a,int b) {  this->a=a;  this->b=b; } ~A() { } int geta() {  return a; } int getb() {  ret

2011-12-17 16:00:39 656

原创 归并排序

1. 2路归并排序     给两个已经排好序的长度相等的数组a,b将排序结果记录到数组C中。算法:取两个下标i,j分别记录数组a,和b的下标,每次那次a[i]和b[j]作比较,如果a[i]>b[j],则j++,否则i++,如果某个下标超出数组长度,则结束循环,另一个数组将其后的元素依次补到数组C后。void p_merge(int a[],int b[],int c[],int len

2011-12-13 17:16:03 285

原创 堆排序

堆排序:1.将待排序记录按照堆的定义建初堆,并输出堆顶元素。2. 调整剩余的记录序列,利用筛选法将前n-i个元素重新筛选建成一个新堆,在输出堆顶元素3. 重复执行,进行n-1次筛选。代码实现#include#includevoid sift(int r[],int k,int m){ int t; int i,j; bool finished=false

2011-12-10 17:14:46 310

原创 插入排序

插入排序:每次从待排序的数中拿出一个作为key,和前面的数字依次开始比较,如果待排序的数字小,则将比较的数后移,然后继续比较,直到找到小于key的数字。代码:#include void insert_sort(int arr[],int len);void insert_sort(int arr[],int len){ int i,j; int key;

2011-12-03 16:21:11 273

原创 内存管理

静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的生命周期内都存在,有编译器在编译的时候分配。栈: 保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容、也会自动被销毁。其特点是效率高,但空间大小有限。堆:由 malloc系列函数或 new操作符分配的内存。其生命周期由 free或 delete决定。在没有释放之前一

2011-12-03 15:44:36 210

原创 函数指针、指针数组与数组指针

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。数组指针:首先它是一个指针,它指向一个数组,在32位系统下永远占4个字节。 函数指针:A. int *p1[10];    [ ]的优先级高于*,p1先与[ ]结合,构成一个数组的定义,数组名为p1,int * 修饰的是数组的内容,即数组的每个元素。B. int (*p2)[10];    (

2011-11-24 21:56:22 379 1

原创 valatile用法

volatile是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统,硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问改变量的代码就不再进行优化,从而可以提供对特殊地址的稳定稳定。      volatile  int  10;     int j=i;     int k=i;volatile告诉编译器i是随时可能发生变化的,每次使用

2011-11-24 19:57:01 381

原创 Unix进程环境

1. 缓存    a. 全缓存  当填满标准I / O缓存后才进行实际I / O操作    b.行缓存   当在输入和输出中遇到新行符时,标准I / O库执行I / O操作2. printf返回值表示成功输入的字符个数,返回0表示没有输出任何字符。Unix进程环境1. int main(int  a rg c, char * a rg v[ ] )     argc 是

2011-11-16 18:50:12 230

原创 static关键字的使用

1. static    a. 静态全局变量:作用域仅限于变量被定义的文件中。    b. 静态局部变量: 在函数体里面定义的,就只能在这个函数里用,由于被static修饰的变量总是存在内存的静态区,所以即使                                 这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。    例1:#incl

2011-11-16 18:49:29 288

原创 BT协议各种消息

1. 客户端与一个peer建立TCP连接后,首先向peer发送握手消息,peer收到握手消息后回应一个握手消息。l     握手消息是一个长度固定为68字节的消息。消息的格式如下:消息格式中一些参数的含义如表13-9所示。表13-9                                                               握手消息

2011-11-05 15:35:32 1832 1

原创 Peer管理模块的设计和实现

系统为每个与之建立TCP连接的Peer构造一个Peer结构体。Peer管理模块负责管理由各个Peer结点构成的Peer链表,主要工作是创建结点,添加结点到Peer链表,从Peer链表删除结点等。         Peer结构体中定义了7种状态,分别是:1. Halfshaked(半握手状态):已经发送握手消息但未收到对方的握手消息,或已经接受到对方的握手消息,但已方未发送握手消息。

2011-11-04 17:05:06 463

原创 5.系统模块设计

1. 种子解析:负责解析种子文件,从中获取Tracker服务器的地址,待下载的文件名和长度,piece长度,各个piece的hash值。2. 连接Tracker:根据HTTP协议构造获取peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个peer的IP地址和端口号。3. 与peer交换数据:根据peer的IP地址和端口号连接peer,从peer处下载数据

2011-10-31 15:01:43 961

原创 4.关键算法及策略

1. 流水线作业:     当客户端向peer发送数据请求时(即发送request消息),一次请求多个slice(即一个数据包发送多个request消息请求多个slice)。假如客户端一次只发送一个slice请求,则peer给客户端发送完一个slice的数据后进入等待,等待客户端发送新的数据请求。如果一次发送多个slice请求,则peer发送完一个slice后接着发送下一个slice,

2011-10-31 14:08:58 577

原创 3. 与Tracker交互及peer之间的通信

与Tracker交互主要有两个目的:一是将字节的下载进度告知给Tracker以便Tracker进行一些相关的统计;二是获取当前下载同一个共享文件的peer的IP地址和端口号。         客户端使用HTTP协议与Tracker进行通信。Tracker通过Http Get方法获取请求,如 htttp://myBT.net/announce ?param1=value1&param2=

2011-10-29 17:07:19 1120

原创 2.种子文件结构

B编码种子文件和Tracker的返回信息都是经过B编码的。B编码有4种类型:字符串、整型、列表、字典。字符串格式::。如:字符串spam,经过B编码为4:spam整型的编码格式:ie,即以i开头,以e作为终结符。如整数3 表示为i3e。列表的编码格式:le,如l4:spam4:eggse表示两个字符串,一个是spam,另一个是eggs。字典的编码格式:de,其中关键字是一个经过

2011-10-29 14:43:46 1951

原创 1. BT协议

BitTorrent(简称BT) 是一个文件分发协议,每个下载者在下载的同时不断的向其他下载者上传已下载的数据。BT协议通过一定的策略保证上传的速度越快,下载的速度也越快。        BT协议的文件分发系统的构成:         一个Web服务器         一个种子文件         一个Tracker(跟踪)服务器         一个原始文件提供者

2011-10-29 12:29:37 1369

转载 eclipse c++ : `pthread_create 未定义

Eclipse + CDT:pthread_create函数编译时报错:undefined reference to `pthread_create’undefined reference to `pthread_create’undefined reference to `MD5′由于pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a

2011-10-28 21:56:05 7440 2

转载 IPad开发环境安装配置图文

转自:http://ideapad.zol.com.cn/53/160_525409.html###补充:首先测试一下自己的系统配置能否安装苹果系统。 可以下载Securable查看你CPU是否支持虚拟还要确认在BIOS是“Enabled”的。 一步一步的详细步骤在vm虚拟机里安装苹果雪豹系统,清晰明了 此帖对"联想IdeaPad"的评论如果想体

2011-10-28 12:37:18 3827 1

原创 linux下fork()函数用法

fork()函数用于创建子进程。进程创建成功后,函数返回两次值,一次返回值为0,代表子进程在运行, 另一次返回子进程的ID,代表当前父进程正在运行。例如下面的程序:/* * Test.c * *  Created on: Oct 19, 2011 *      Author: root */#include #include #include int m

2011-10-25 15:06:14 386

原创 linux 进程结构

linux一个进程有3部分组成:代码段,数据段,堆栈段。代码段存放程序的可执行代码。数据段存放程序的全局变量,常量,静态变量。堆栈段中的堆用于存放动态分配的内存变量;堆栈段中的栈用于函数调用,存放函数的参数,函数内部定义的局部变量。 Linux进程状态 运行状态:R表示可中断等待状态:S表示不可中断等待状态:D表示僵死状态:进程已终止,但进程描述符依然存在,直到父进程调

2011-10-25 14:44:39 339

原创 linux系统文件目录概述

一般的Linux发行版本都含有如下几个目录:1. /bin 用于存放普特用户可执行的命令,系统中的任何用户都可以执行该目录中的命令            如ls、cp、mkdir等命令2. /boot Linux的内核及启动系统时所需要的文件,为保证启动文件更加安全可靠,通常把该目录存放在独立的分区上3. /dev 设备文件的存储目录,如硬盘、光驱等。4. /etc 用于存放系

2011-10-24 21:15:39 276

原创 条件编译

条件编译:源程序被编译时,其中一部分内容只在某个条件成立或不成立时才去编译,即对一部分内容指点编译的条件。范式一    #ifndef 标识符        程序段 1    #endif含义:如果没有定义标识符,就编译程序段1示例:         #ifndef _getkey_h               #define _getkey_h

2011-10-23 21:37:45 226

转载 linux wait函数用法

【转自:http://hi.baidu.com/_hstyle/blog/item/fb7b12c4447390af8226acc5.html】    进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一

2011-10-22 23:33:20 1173

原创 thinking

人其实不怕失败,最怕的是几年下来,周围的一切都变了,却发现自己什么都没有变 “不要为明天忧虑,天上的飞鸟,不耕种也不收获,上天尚且要养活它,田野里的百合花,从不忧虑它能不能开花,是不是可以开得和其它一样美,但是它就自然的开花了,开得比所罗门皇冠上的珍珠还美。你呢,忧虑什么呢?人比飞鸟和百合花贵重多了,上帝会弃你不顾吗?”

2011-10-20 15:07:04 196

原创 linux 创建线程问题undefined reference to 'pthread_create'

报错:undefined reference to 'pthread_create'问题原因:    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。问题解决:    在编译中要加 -lpthrea

2011-10-20 15:06:46 396

原创 在Eclipse中运行C++程序出现"Launch failed. Binary not foud"和"Program file not Specified"的问题

第一步:右键点击工程,选择 Properties->C/C++ Build->Settings->Binary Parser, 勾选 "PE Windows Parser" 。第二步:运行配置界面中下,在C/C++ Appliaction一栏中点击Browse按钮,在项目工程目录下,找到Debug目录,选择可执行程序,即gcc,确定后,点击应用并运行,可以了~~~

2011-10-20 15:06:17 1314 3

IT学生解惑真经

韩愈的《师说》中写道:“非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解 矣。”有了这些困惑并不可怕,可怕的是不知道如何寻找答案和解决问题的方法。 现在,就开始在这些老师的文章中寻找答案吧。

2011-10-23

空空如也

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

TA关注的人

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