自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (14)
  • 收藏
  • 关注

原创 七、Linux网络编程-TCP客户/服务器模型、回射客户/服务器

TCP客户/服务器模型服务器模型:回射客户/服务器(1)、创建套接字功能:创建一个套接字用于通信函数声明:#include /* See NOTES */#include int socket(int domain, int type, int protocol);参数:domain:指定通信协议族(protocol

2015-05-06 16:21:29 697

原创 六、Linux网络编程-socket、套接字地址结构、地址转换、字节序、套接字类型

socket介绍       socket可以看成是用户进程与内核网络协议栈的编程接口。它屏蔽了底层通信的细节,让我们更方便的通信。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。套接口地址结构IPv4地址结构IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中struct

2015-05-05 20:14:47 1214

原创 五、Linux网络编程-TCP/IP基础(五)滑动窗口协议、UDP特点、UDP报文格式

一、滑动窗口协议滑动窗口概念不仅存在于数据链路层,也存在于传输层,两者有不同的协议,但基本原理是相近的。其中一个重要区别是,一个是针对于帧的传送,另一个是字节数据的传送。滑动窗口主要实现了流量的控制。在TCP连接建立的过程中,TCP中一个字段包含了窗口的大小,还包含了一个MSS大小(防止ip层数据分片)。  滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧

2015-05-05 17:38:32 1308

原创 四、Linux网络编程-TCP/IP基础(四)传输层协议TCP、TCP报文格式、连接三次握手、终止四次挥手

一、TCP特点(1)基于字节流 TCP传输的单位是段,基于字节流意味着对段的边界不做任何假定,TCP没有提供边界处理,所以TCP需要处理粘包问题。(2)、面向连接 需要建立连接(3)、可靠传输 网际校验和(4)、缓冲传输    缓存数据,找到合适时机发送,提高效率(5)、全双工(6)、流量控制    滑动窗口机制二、TCP报文格式

2015-05-01 21:47:23 986 1

原创 三、Linux网络编程-TCP/IP基础(三)IP数据报格式、网际校验和、路由

一、IP数据报格式(1)、IP头部的数据格式版本  IP协议版本号,长度为4位,IPv4此字段值为4,IPv6此字段值为6首部长度  以32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节服务类型(TOS)  长度为8位。此字段包含3位的优先权(现已忽略),4位的服务类型子字段和1位的保留位(必须置0)。4位的服务类型分别为最小

2015-05-01 21:13:38 1132

原创 二、Linux网络编程-TCP/IP基础(二)MTU、路径MTU、以太网帧格式、ICMP、ARP、RARP

一、最大传输单元(MTU)和路径MTU        以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MT

2015-04-22 21:29:16 1787

原创 一、Linux网络编程-TCP/IP基础(一)ISO/OSI参考模型、TCP/IP四层模型、基本概念

一、ISO/OSI参考模型qOSI(open system interconnection)开放系统互联模型是由ISO(InternationalOrganization for Standardization)国际标准化组织定义的网络分层模型,共七层。以下是各层的作用:物理层(Physical Layer):物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个

2015-04-22 15:31:34 1221

原创 二十一、Linux系统编程-管道(二)命名管道(FIFO)、匿名管道与命名管道区别、命名管道的打开规则

一、命名管道(FIFO)        创建匿名管道实际上是创建一个64K大小的内存缓冲区,匿名管道的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件。函数声明:#include #include int mkfifo(const char *p

2015-04-19 18:09:22 1639

原创 二十、Linux系统编程-管道(一)管道、匿名管道、管道读写规则

一、管道概念:管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”,管道本质上是内核中一块固定大小的缓冲区。管道限制:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间

2015-04-11 15:45:13 648

原创 十九、Linux系统编程-信号(六)三种不同精度的睡眠sleep、usleep、nanosleep

一、三种不同精度的睡眠声明:#include unsigned int sleep(unsigned int seconds);二、三种时间结构三、setitimer四、getitimer

2015-04-11 15:26:28 2429

原创 十八、Linux系统编程-信号(五)sigaction和sigqueue

一、sigaction函数函数声明:#include int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);函数参数:该函数的第一个参数为信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己的处理函数,将导致信号安装错误)第

2015-03-31 15:57:26 572 1

原创 十七、Linux系统编程-信号(四)信号在内核中表示、信号的阻塞和未决

一、信号在内核中的表示        执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示如下:

2015-03-31 11:24:27 511

原创 十六、Linux系统编程-信号(三)其他信号发送函数、可重入及不可重入函数

一、更多信号发送函数(1)、alarm 发送时钟信号函数声明:函数参数:返回值:(2)、setitimer(3)、abort二、可重入函数与不可重入函数三、不可重入函数示例

2015-03-30 20:08:48 870

原创 十五、Linux系统编程-信号(二)信号分类、可靠信号与不可靠信号、信号发送 pause

一、信号分类(1)、可靠信号不可靠信号linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是:进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。早期

2015-03-30 17:25:43 767

原创 十四、Linux系统编程-信号(一)中断、信号、中断和信号

一、中断(1)、中断概念      中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务

2015-03-28 12:45:43 2269

原创 十三、Linux系统编程-进程(六)进程组、会话期、守护进程

一、什么是守护进程守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。二、守护进程的创建步骤三、daemon

2015-03-27 21:22:52 610

原创 十二、Linux系统编程-进程(五)SIGCHLD、wait、waitpid、system

一、SIGCHLD当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。父进程查询子进程的退出状态可以用wait/waitpid函数二、wait和waitpid(1)、函数原

2015-03-17 23:39:36 671

原创 十一、Linux系统编程-进程(四)替换进程映像exe函数族

一、exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。(1)、声明:#include int execve(const char *filen

2015-03-16 21:40:29 880

原创 十、Linux系统编程-进程(三)父子进程共享文件、fork和vfork、exit和_exit、atexit注册退出事件

一、fork之后父子进程共享文件打开的文件在fork之后共享文件表。示例:#include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perr

2015-03-15 22:45:10 923

原创 九、Linux系统编程-进程(二)fork系统调用、复制进程映像、写时复制、孤儿进程和僵尸进程

一、fork系统调用(1)、函数功能:创建一个进程(2)、声明:#include pid_t fork(void);(3)返回值:成功父进程返回子进程PID,子进程返回返回0,失败返回-1。fork系统调用之后,父子进程交替执行。如果父进程先退出,那么子进程的父进程将变为init进程。(注:除了0进程,任何一个进程都必须有父进程)如果子进程先退出,那么子进程必须等到父

2015-03-14 13:11:52 631

原创 八、Linux系统编程-进程(一)进程概念、进程数据结构、进程状态变迁、进程创建和撤销

一、什么是进程从用户角度来说,进程是程序的一次动态执行过程;从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。每一个进程都有自己独立的地址空间与执行状态。二、进程数据结构进程包含以下结构:代码段+数据段+堆栈段+PCBPCB(进程控制块):用于描述进程情况及控制进程运行所需的全部信息。q进程描述信息q进程标识符用于唯一的标识一个进

2015-03-14 11:27:42 1607

原创 七、Linux系统编程-文件和IO(五)fcntl函数及常用操作、文件锁

一、fcntl函数及常用操作(1)、函数声明二、文件锁

2015-03-12 23:03:27 476

原创 六、Linux系统编程-文件和IO(四)文件共享、复制文件描述符

一、文件共享每个进程都有一个自己的文件描述符表。在一个进程中,一个文件被打开之后,会分配一个文件描述符,一个文件表表项,一个v节点表。其中文件表保存文件状态,包括:读、写、追加、同步、非阻塞等。其中文件表项是不能共享的,文件被打开一次,就会分配一个文件表项;v节点表示可以共享的,两个不同的文件表项可以指向同一个v节点表。(1)、一个进程打开两个文件模型:(2)、一个进程两次打开

2015-03-10 22:13:40 19061

原创 五、Linux系统编程-文件和IO(三)文件元数据的获取

一、读取文件元数据(1)、函数功能:获取文件元数据(2)、函数声明:#include #include #include int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat *buf);

2015-03-09 20:32:24 1243

原创 四、Linux系统编程-文件和IO(二)文件的读写

一、read、write函数声明:#include ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);二、lseek三、目录访问(opendir、readdir、closedir)四、rmdir、mkdir五、chm

2015-03-08 17:59:37 617

原创 三、Linux系统编程-文件和IO(一)文件的打开和关闭

一、什么是I/O输入/输出是主存和外部设备之间拷贝数据的过程设备->内存(输入操作)内存->设备(输出操作)高级I/O:ANSI C提供的标准I/O库称为高级I/O,通常也称为带缓冲的I/O低级I/O:通常也称为不带缓冲的I/O二、文件描述符对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核

2015-03-04 22:37:53 600

原创 三十五、单例模式的改进、实现sizeof计算变量和类型大小,align计算对齐数

一、单例模式的改进之前实现了一个单例模式这里,这个单例模式的问题是构造的对象在程序退出时无法释放。我们使用了两种方法解决这个问题。第一:使用静态内部类对象,利用对象的确定性析构原理,在成员对象析构的时候释放外部类对象。第二:直接返回静态类对象。显然第一种方法不够简洁,而且这两种方法都使用了静态类对象,所以不是线程安全的。这里我们用智能指针auto_ptr改进单例模式。(注:auto_ptr在C

2015-02-28 12:46:19 564

原创 三十五、异常(二)异常和继承、异常和指针、异常规格说明、标准库异常层次

一、异常与继承如果异常类型为C++的类,并且该类有其基类,则应该将派生类的错误处理程序放在前面,基类的错误处理程序放在后面。(否者派生类的异常会被基类类型捕获,而异常要求每种类型捕获对应类型的异常)示例:#include #include using namespace std;class MyException{public: MyException(const

2015-02-28 11:16:53 585

原创 三十四、异常(一)异常抛出、异常捕获、异常传播

一、程序错误程序错误包含以下:编译错误,即语法错误。程序就无法被生成运行代码。运行时错误不可预料的逻辑错误可以预料的运行异常 例如:动态分配空间时可能不会成功打开文件可能会失败除法运算时分母可能为0整数相乘可能溢出数组越界……二、C语言处理程序错误的方法(1)、返回值double func(){ int ret = func(

2015-02-26 22:20:42 596

原创 C++检测内存泄露、DebugView的使用

我们的程序用到指针的话,可能编译运行都没问题,但是可能存在内存泄露,如何检测这种泄露呢。可以使用一个好用的软件DebugView,下载之后无需安装,直接运行即可,它就会在窗口显示调试信息。为了检测我们的程序是否有内存泄露问题,我们需要在我们的项目main函数之前加上:#define _CRTDBG_MAP_ALLOC然后在main函数return 0;之前加上 _CrtDumpMe

2015-01-29 13:16:31 1423

原创 三十三、RTTI(runtime type information)、dynamic_cast运算符、typeid运算符、type_info

一、RTTI(runtime type information)          RTTI(Run-Time Type Information)运行时类型检查的英文缩写,它提供了运行时确定对象类型的方法。面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持。这里研究一下C++是如何使用RTTI的。二、dynamic_cast运算符          使用d

2015-01-24 12:08:22 654

原创 三十二、C++内存布局,对象大小计算、虚函数虚继承对类内存模型的影响

一、类大小的影响因素          我们知道,对象的大小是受一下因素影响:成员变量虚函数(产生虚函数表)虚拟继承(使用virtual方式继承,为了保证继承后父类的内存布局只会存在一份)对象大小跟成员函数,静态函数和静态数据无关。二、类大小遵循结构体对齐原则          我们在这里讲过结构体内存对齐的原则,这里我们在通过例子来看结构体对齐是如何影响对象的大小

2015-01-23 23:53:15 920

原创 三十一、反射、C++动态对象创建实现

一、反射                    反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,那种程序能够“观察”并且修改自己的行为。它包括动态获取类型信息(包括方法和属性),动态创建对象,动态获取对象的方法,动态操作对象的属性。为了实现反射,必须给每个类添加元数据。这里我们只实现动态创建对象。二、动态对象的创建       

2015-01-18 11:29:52 940 2

原创 三十、纯虚函数、抽象类、多态、简单工厂模式

一、纯虚函数          虚函数是多态是实现多态的前提,如果我们需要在基类中定义共同的结构,那么接口就需要定义成虚函数。但是很多情况下基类的接口是无法实现的,比如形状类Shape,定义一个Draw方法。很明显这个方法没法实现,因为我们可以画出圆,正方形,但是不能画出"形状"。此时我们可以将这些接口定义成虚函数。          在基类中不能给出有意义的虚函数定义,这时可以把它说

2015-01-17 16:50:56 666

原创 二十九、多态、静态绑定与动态绑定、虚函数、虚表指针、object slicing与虚函数、overload、override 、overwrite

一、多态      多态性是面向对象程序设计的重要特征之一。它是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。比如我们定义一个带有Run的虚函数动物类,让鱼,鸟,和狗继承自这个类,当我们用虚基类指针Animal* p;指向不同派生类,调用函数时会调用派生类的函数,比如鱼是水里游,鸟在天上飞,狗在地上跑,实现同一个指针根据不同指向具有不同的行为,这就是多态。多态可以通过以下几种

2015-01-17 13:37:34 845

原创 二十八、继承(五) 虚继承对C++对象内存模型造成的影响

一、虚继承对C++对象内存模型造成的影响先看示例:#include using namespace std;class BB{public: int bb_;};class B1 : virtual public BB{public: int b1_;};class B2 : virtual public BB{public: int b2_;};c

2015-01-16 23:51:03 778

原创 二十七、继承(四) 多重继承、虚继承与虚基类、虚基类及其派生类构造函数

一、多重继承          在现实生活中,经常会有一个对象属于多个类别的情况,比如沙发床同时具有沙发和床的特点,这个时候我们可以使用多重继承来模拟这种关系。例子如下:#include using namespace std;class Furniture{public: Furniture(int weight) : weight_(weight) { } int

2015-01-15 21:15:04 678 1

原创 二十六、继承(三) 转换与继承、派生类到基类的转换、基类到派生类的转换

一、转换与继承          派生类对象也是基类对象。比如我们可以说汽车是车,机动车也是车。这意味着在使用基类的地方可以用派生类来替换。二、派生类到基类的转换当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型 upcasting 安全转换)派生类对象指针自动转化为基类对象指针派生类对象引用自动转化为基类对象引用派生类对象自动转换为基类

2015-01-14 21:56:57 774

原创 二十五、继承(二) 不能自动继承的成员函数、继承与构造函数、友元关系与继承、静态成员与继承

一、不能自动继承的成员函数          有三种函数不能被继承,构造函数,析构函数和=运算符,基类的构造函数和析构函数只负责对基类数据成员的初始化和清理,因为基类并不知道派生类有哪些数据成员。=运算符和构造函数功能类似,所以也不能被继承。二、继承与构造函数          基类的构造函数不被继承,所以派生类中需要声明自己的构造函数来初始化新增的数据成员。在声明构造函数时,只需

2015-01-13 21:23:47 777

原创 二十四、继承(一) 代码重用、继承方式、接口继承与实现继承、继承和重定义、继承和组合

一、代码重用          在C语言中重用代码的最主要方式就是封装成函数然后其他地方调用这个函数,但是一个函数往往通用性不是很大。所以C语言中很多代码复用都是修改粘贴代码。C++很重要的一个特征就是代码重用,C++可以用继承或组合或者模板的方式来重用。通过组合或继承现有的的类来创建新类,而不是重新创建它们。我们创建了一个基类,用我们的类去继承基类,我们的类就有了基类的功能。二、继承

2015-01-12 23:39:07 1052

js特效大全

js所用的代码大全。各种例子,各种特效,详细的代码

2013-08-20

VC操作word大全

VC操作word大全,详细的例子,包括很多平常项目用到的例子,拿出来贡献给大家

2013-08-11

MFC有关word所有操作

MFC有关word的所有详细操作,有源代码,详细注释

2013-08-11

提取word信息

C++提取word信息,MFC使用能显示word内容

2013-08-11

C++实现旋转图像

C++实现旋转图像,有详细的代码注释,希望大家

2013-08-08

C++实现利用OpenGL实现三维绘图

C++利用OpenGL实现三维绘图,包括详细的代码注释

2013-08-08

多媒体播放器

C++写的多媒体播放器,包括详细的代码注释

2013-08-08

Midi播放器

C++写的Midi播放器,详细的代码注释

2013-08-08

C++写的CD播放器

C++写的一个CD播放器,源代码,包括详细注释

2013-08-08

C++的全部算法

里面包括学习中遇到的所有算法,用C++实现的,希望大家喜欢

2013-08-08

Office VBA编程合集

office VBA编程,包括word,excle,ppt等所有office的产品

2013-08-08

QT操作word

QT对word的一些操作,包括提取,插入,删除等信息,里面有代码,有示例

2013-08-08

Word97-2007BinaryFileFormat%28doc%29Specification

适合开发word2003以前的word的作为参考文档,或者像了解word的二进制存储结构的

2013-08-08

dos的学习资料

不错的dos学习,可以帮大家学好dos,计算机的学习

2012-09-23

空空如也

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

TA关注的人

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