自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ctthuangcheng

自学成才。。。。加油!

原创 Effective C++ ——模板和泛型编程

条款41:了解隐式接口和编译器多态       以public继承的类,

2013-08-25 16:12:47

阅读数 1422

评论数 0

原创 Effective C++ ——继承与面向对象设计

条款32:确定你的public继承塑模出is-a关系       以public继承的类,其父类的所有的性质都应该使用与子类,任何需要父类的地方都应该能用子类来代替,任何子类类型的对象也同时是父类的:class Person{...}; class Student : public Person{...

2013-08-25 03:00:46

阅读数 1367

评论数 0

原创 Effective C++ ——实现

条款26:尽可能延后变量定义式的出现时间       当你定义一个变量的时候就要保证这个变量能够在程序中使用到,不要定义无意义的变量,这样就要求我们最好是在变量使用到的时候才做定义,因为如果一个变量定义了却不使用可能会造成效率上的降低,毕竟很多变量的构建是要调用对应的构造函数和析构函数的,考虑下面...

2013-08-25 01:36:13

阅读数 1337

评论数 0

原创 Effective C++ ——设计与声明

条款18:让接口更容易的被使用,不易误用       接口设计主要是给应用接口的人使用的,他们可能不是接口的设计者,这样作为接口的设计者就要对接口的定义更加易懂,让使用者不宜发生误用,例如对于一个时间类:class Date{ public: Data(int month, int day...

2013-08-25 01:04:06

阅读数 1267

评论数 0

原创 Effective C++ ——资源管理

条款13:以对象来管理资源       在C++中我们经常会涉及到资源的申请与申请,一般都是由关键字new 和 delete来操作的,两者都是成对存在的,缺一不可,否则会出现意想不到的问题,例如:class Investment{.....}; Investment* pinv = createI...

2013-08-24 18:54:15

阅读数 1426

评论数 1

原创 Effective C++ ——构造/析构/赋值运算符

条款五:了解C++默认编写并调用那些函数        是否处在空的类?       假设定义类为class Empty{};当C++编译器处理过后会变成如下的形式:class Empty{ Empty(){} ~Empty(){} Empty& operator=(const Em...

2013-08-24 17:33:07

阅读数 2492

评论数 0

原创 大数相加

基本思路:字符串反转、字符变数字、位运算、反序输出#include #include #define Max 101 void print(char sum[]); void bigNumAdd(char a[],char b[],char sum[]); int main() { char a...

2013-08-12 21:10:02

阅读数 1116

评论数 0

转载 Linux音频编程指南

一、数字音频       音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理。       数字音频系统通过将声波的波型转换成一系列二进制数据,来实现对原始声音的重现,实现这一步...

2013-08-12 14:38:41

阅读数 1461

评论数 0

转载 理解 Linux 的硬链接与软链接

Linux 的文件与目录       现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用...

2013-08-12 14:02:11

阅读数 2311

评论数 0

转载 一个 Linux 上分析死锁的简单方法

简介       死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程...

2013-08-12 11:20:06

阅读数 1801

评论数 0

原创 char能表示(-128~127)

char 的取值范围是 -128 ~127       由于-128的原码用8位无法表示,所以必须扩展到16位去表示,然后对16位的原码计算出16位的反码和补码,最后对16位的补码作低8位的截断,截断的低8位的值就是-128的补码了。// 8位所能表示的 原码 的范围-127到+127 // 8...

2013-08-04 21:19:25

阅读数 1518

评论数 1

转载 UNIX网络编程——ioctl 函数的用法详解

1.介绍       Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口。并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现。2.相关结构体与相关函数#in...

2013-08-04 15:47:31

阅读数 2817

评论数 0

转载 UNIX网络编程——原始套接字(dos攻击)

原始套接字(SOCK_RAW)。应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能。       注意原始套接字只能够由有 root权限的人创建。       可以参考前面的博客UNIX网络编程——原始套接字的魔力【上】>>。/********************...

2013-08-04 14:51:04

阅读数 1625

评论数 0

转载 UNIX网络编程——尝试探索基于Linux C的网卡抓包过程

其实想探究网卡抓包问题已经有好久了。前几天找了时间算是基本上了解了那部分的一些基本东西,在这里只是赘述罢了。抓包首先便要知道经过网卡的数据其实都是通过底层的链路层(MAC),在Linux系统中我们获取网卡的数据流量其实是直接从链路层收发数据帧。至于如何进行TCP/UDP连接本文就不再赘述(之前的一...

2013-08-04 14:09:53

阅读数 2629

评论数 0

转载 UNIX网络编程——揭开网络编程常见API的面纱【下】

Linux网络编程数据收发的API流程分析       只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了。在网络编程章节的数据接收过程中,我们主要介绍过read()、recv()、recvfrom()还有一个recvmsg()没介绍到,今天我们就来看一下这几个...

2013-08-04 13:47:20

阅读数 1502

评论数 0

转载 UNIX网络编程——揭开网络编程常见API的面纱【上】

Linux网络编程API函数初步剖析       今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。       1、socket(family,type,protocol)       当我们在开发网络应用程序时,...

2013-08-04 13:33:31

阅读数 1706

评论数 0

转载 UNIX网络编程——原始套接字的魔力【续】

如何从链路层直接发送数据帧       上一篇里面提到的是从链路层“收发”数据,该篇是从链路层发送数据帧。       上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑定到本地一个接口上,然后该套接字就只接收从该接口收上来的对应的数据包。今天我们用原始套接字来手...

2013-08-04 03:33:41

阅读数 2388

评论数 0

转载 UNIX网络编程——原始套接字的魔力【下】

可以接收链路层MAC帧的原始套接字       前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发。提醒一点,在用这种方式构造原始IP报文时,第三个参数protocol不能用IPPROTO_IP,这...

2013-08-04 01:33:49

阅读数 2307

评论数 0

转载 UNIX网络编程——原始套接字的魔力【上】

基于原始套接字编程       在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证:                   也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤...

2013-08-03 22:38:29

阅读数 2136

评论数 1

原创 UNIX网络编程——原始套接字SOCK_RAW

实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM)。而这些数据包都是由系统提供的协议栈实现,用户只需要填充应用层报文即可,由系统完成底层报文头的填充并发送。然而在某些情况下需要执行更底层的操...

2013-08-03 18:08:49

阅读数 5466

评论数 0

转载 UNIX环境高级编程——Linux终端设备详解

终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:1....

2013-08-03 16:25:07

阅读数 1417

评论数 0

转载 UNIX网络编程——网络IPC:套接字

Contents套接字接口套接字描述符寻址字节序地址格式地址查询绑定地址建立连接数据传输套接字选项带外数据UNIX域套接字使用套接字的示例面向连接的ruptime无连接的ruptime套接字接口套接字接口是一组用来结合UNIX I/O函数进行进程间通信的函数,大多数系统上都实现了它,包括各种UNI...

2013-08-03 15:28:54

阅读数 1957

评论数 0

转载 UNIX网络编程——Socket通信原理和实践

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文...

2013-08-03 14:38:19

阅读数 2169

评论数 0

原创 UNIX环境高级编程——单实例的守护进程

#include #include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */ int daemonize(){ int childpid, fd...

2013-08-03 03:08:23

阅读数 1470

评论数 0

原创 UNIX环境高级编程——初始化一个守护进程

#include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */ int daemonize(){ int childpid, fd, fdtables...

2013-08-03 03:05:54

阅读数 1385

评论数 0

原创 UNIX环境高级编程——创建孤儿进程

/* 创建孤儿进程 父进程终止后,向子进程发送挂断信号,又接着发送继续信号。 */ #include #include #include #include #include #include #include /* 处理接受到的挂断信...

2013-08-03 02:44:52

阅读数 1305

评论数 0

原创 UNIX环境高级编程——实现uid to name

setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据。strcut passwd * getpwent(void);       getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd 结构返回。第...

2013-08-03 02:27:42

阅读数 1460

评论数 0

原创 UNIX环境高级编程——标准IO-实现查看所有用户

#include #include #include #include int main(int argc, char *argv[]) { char szBuf[512]; char szName[512]; FILE *f = fopen("/etc/passwd&qu...

2013-08-03 02:03:09

阅读数 1215

评论数 0

原创 UNIX环境高级编程——环境变量表读取/添加/修改/删除

#include #include #include int main() { char* pValue; pValue = getenv("HOME"); // 起始目录(主目录) printf("$HOME = %s\n", pValue)...

2013-08-03 01:56:21

阅读数 1543

评论数 0

转载 UNIX网络编程——进程间通信概述

一、顺序程序与并发程序特征顺序程序特征顺序性封闭性:(运行环境的封闭性)确定性可再现性并发程序特征共享性并发性随机性二、进程互斥1、由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥2、系统中某些资源一次只允许一个进程使用,称这样的资源为临界...

2013-08-03 00:20:37

阅读数 1460

评论数 0

转载 UNIX网络编程——通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数

在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符。       下面先来看两个函数:#include #include ssize_t sendmsg(int sockfd, const struct msghdr *msg, in...

2013-08-03 00:09:35

阅读数 1745

评论数 0

转载 UNIX网络编程——UNIX域套接字编程和socketpair 函数

一、UNIX Domain Socket IPC       socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但...

2013-08-02 19:04:26

阅读数 2083

评论数 0

转载 UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

一、epoll 系列函数简介#include int epoll_create(int size); int epoll_create1(int flags); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);...

2013-08-02 18:39:00

阅读数 1646

评论数 0

转载 UNIX网络编程——select函数的并发限制和 poll 函数应用举例

一、用select实现的并发服务器,能达到的并发数,受两方面限制       1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sy...

2013-08-02 17:54:12

阅读数 1557

评论数 0

转载 UNIX网络编程——epoll 的accept , read, write(重要)

在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK)。       从字面上看,意思是: EAGAIN: 再试一次 EWOULDBLOCK:如果这是一个阻塞socket, 操作将被block perror...

2013-08-02 15:24:24

阅读数 2542

评论数 2

转载 UNIX网络编程——epoll的 et,lt关注点

epoll模型有两种工作模式,ET和LT两种模式下都有一些细节值得注意,以下是一些思考: 一、ET模式下Q1:调用accept时,到底TCP完成队列里有多少个已经建立好的连接?这里又得分情况来说:没有连接。这种情况发生在TCP连接被客户端夭折,即在服务端调用accept之前客户端给出一个RST。该...

2013-08-02 14:28:29

阅读数 2493

评论数 1

转载 UNIX网络编程——解决TCP网络传输“粘包”问题

当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user datagr...

2013-08-01 19:06:25

阅读数 1619

评论数 1

转载 UNIX网络编程——Socket粘包问题

一、两个简单概念长连接与短连接:1、长连接     Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2、短连接     Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个C...

2013-08-01 18:28:20

阅读数 1982

评论数 0

转载 UNIX网络编程——Socket/TCP粘包、多包和少包, 断包

为什么TCP 会粘包        前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整。为什么会这样吗,我们用mina这样通信框架,还会出现这种问题?       TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可...

2013-08-01 17:53:32

阅读数 1713

评论数 0

转载 UNIX网络编程——利用ARP和ICMP协议解释ping命令

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

2013-08-01 15:38:02

阅读数 1855

评论数 0

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