08 2013 档案

Effective C++ ——模板和泛型编程
摘要:条款41:了解隐式接口和编译器多态 以public继承的类, 阅读全文

posted @ 2013-08-25 16:12 胡永光 阅读(116) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-25 03:00 胡永光 阅读(121) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-25 01:36 胡永光 阅读(192) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-25 01:04 胡永光 阅读(136) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-24 18:54 胡永光 阅读(158) 评论(0) 推荐(0) 编辑

Effective C++ ——构造/析构/赋值运算符
摘要:条款五:了解C++默认编写并调用那些函数 是否存在空的类? 假设定义类为class Empty{};当C++编译器处理过后会变成如下的形式:class Empty{ Empty(){} ~Empty(){} Empty& operator=(const Empty& rh... 阅读全文

posted @ 2013-08-24 17:33 胡永光 阅读(132) 评论(0) 推荐(0) 编辑

Effective C++ ——让自己习惯C++
摘要:条款一:视C++为一个语言联邦 为了理解C++,你必须认识其主要的次语言。幸运的是总共只有四个: C:C++是由C语言继承而来的,必然对C有很好的兼容性,这一部分主要包括C中的一些语言,库函数等。但当你以C++内的C成分工作时,高效编程守则照出C语言的局限:没有模板、没有异常、没有重载... 阅读全文

posted @ 2013-08-24 15:12 胡永光 阅读(133) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-12 21:10 胡永光 阅读(139) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-12 14:38 胡永光 阅读(200) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-12 14:02 胡永光 阅读(215) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-12 11:20 胡永光 阅读(232) 评论(0) 推荐(0) 编辑

最近的一些感悟
摘要:好久没有写了,今天写一些最近几个月的感悟 1、积极的心态真的很重要。 如果你觉得自己是弱者,别人很强,自己有可能会失败,那结果多半是失败的。 最近几个月出差去了几个分公司,跟各地的销售跑了下各地的市场,收获颇多。 做的好的城市,精神面貌、心态都很好,也更容易业绩增加。做的稍差的,经常性的把竞争... 阅读全文

posted @ 2013-08-09 11:36 胡永光 阅读(144) 评论(0) 推荐(0) 编辑

char能表示(-128~127)
摘要:char 的取值范围是 -128 ~127注:数0的补码表示是唯一的:+0的补码=+0的反码=+0的原码=00000000-0的补码=11111111+1=00000000(mod 2的8次方) 由于-128的原码用8位无法表示,所以必须扩展到16位去表示,然后对16位的... 阅读全文

posted @ 2013-08-04 21:19 胡永光 阅读(302) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-04 15:47 胡永光 阅读(423) 评论(0) 推荐(0) 编辑

UNIX网络编程——原始套接字(dos攻击)
摘要:原始套接字(SOCK_RAW)。应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实现的功能。 注意原始套接字只能够由有 root权限的人创建。 可以参考前面的博客>。/******************** DOS.c ... 阅读全文

posted @ 2013-08-04 14:51 胡永光 阅读(202) 评论(0) 推荐(0) 编辑

UNIX网络编程——尝试探索基于Linux C的网卡抓包过程
摘要:抓包首先便要知道经过网卡的数据其实都是通过底层的链路层(MAC),在Linux系统中我们获取网卡的数据流量其实是直接从链路层收发数据帧。至于如何进行TCP/UDP连接本文就不再赘述(之前的一段关于web server的程序已经大概说明),直接从最关键的原始套接字( raw socke... 阅读全文

posted @ 2013-08-04 14:09 胡永光 阅读(465) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-04 13:47 胡永光 阅读(148) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-04 13:33 胡永光 阅读(171) 评论(0) 推荐(0) 编辑

UNIX网络编程——原始套接字的魔力【续】
摘要:如何从链路层直接发送数据帧 上一篇里面提到的是从链路层“收发”数据,该篇是从链路层发送数据帧。 上一节我们主要研究了如何从链路层直接接收数据帧,可以通过bind函数来将原始套接字绑定到本地一个接口上,然后该套接字就只接收从该接口收上来的对应的数据包。今天我们用原始套接字来手... 阅读全文

posted @ 2013-08-04 03:33 胡永光 阅读(261) 评论(0) 推荐(0) 编辑

UNIX网络编程——原始套接字的魔力【下】
摘要:可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发。提醒一点,在用这种方式构造原始IP报文时,第三个参数protocol不能用IPPROTO_IP,这... 阅读全文

posted @ 2013-08-04 01:33 胡永光 阅读(248) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 22:38 胡永光 阅读(227) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 18:08 胡永光 阅读(334) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——Linux终端设备详解
摘要:终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletype公司生产的。在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下... 阅读全文

posted @ 2013-08-03 16:25 胡永光 阅读(233) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 15:28 胡永光 阅读(524) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 14:38 胡永光 阅读(195) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——单实例的守护进程
摘要:#include #include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesiz... 阅读全文

posted @ 2013-08-03 03:08 胡永光 阅读(145) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——初始化一个守护进程
摘要:#include #include #include #include #include #include #include #include #include /* 创建守护进程函数 */int daemonize(){ int childpid, fd, fdtablesize; int er... 阅读全文

posted @ 2013-08-03 03:05 胡永光 阅读(117) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——创建孤儿进程
摘要:/* 创建孤儿进程 父进程终止后,向子进程发送挂断信号,又接着发送继续信号。 */ #include #include #include #include #include #include #include /* 处理接受到的挂断信号 */ stati... 阅读全文

posted @ 2013-08-03 02:44 胡永光 阅读(158) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——实现uid to name
摘要:setpwent()用来将getpwent()的读写地址指回文件开头,即从头读取密码文件中的账号数据。strcut passwd * getpwent(void); getpwent()用来从密码文件(/etc/passwd)中读取一项用户数据,该用户的数据以passwd... 阅读全文

posted @ 2013-08-03 02:27 胡永光 阅读(258) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——标准IO-实现查看所有用户
摘要:#include #include #include #include int main(int argc, char *argv[]){ char szBuf[512]; char szName[512]; FILE *f = fopen("/etc/passwd","r"); memset(s... 阅读全文

posted @ 2013-08-03 02:03 胡永光 阅读(185) 评论(0) 推荐(0) 编辑

UNIX环境高级编程——环境变量表读取/添加/修改/删除
摘要:#include #include #include int main(){ char* pValue; pValue = getenv("HOME"); // 起始目录(主目录) printf("$HOME = %s\n", pValue); // 在主目录下建立a.txt文件 char sz... 阅读全文

posted @ 2013-08-03 01:56 胡永光 阅读(143) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 00:20 胡永光 阅读(136) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-03 00:09 胡永光 阅读(185) 评论(0) 推荐(0) 编辑

UNIX网络编程——UNIX域套接字编程和socketpair 函数
摘要:一、UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但... 阅读全文

posted @ 2013-08-02 19:04 胡永光 阅读(169) 评论(0) 推荐(0) 编辑

UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
摘要:前面博客>有关于epoll函数的讲解。一、epoll 系列函数简介#include int epoll_create(int size);int epoll_create1(int flags);int epoll_ctl(int epfd, int op, int fd, stru... 阅读全文

posted @ 2013-08-02 18:39 胡永光 阅读(209) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-02 17:54 胡永光 阅读(171) 评论(0) 推荐(0) 编辑

UNIX网络编程——epoll 的accept , read, write(重要)
摘要:在一个非阻塞的socket上调用read/write函数,返回EAGAIN或者EWOULDBLOCK(注:EAGAIN就是EWOULDBLOCK)。 从字面上看,意思是: EAGAIN: 再试一次 EWOULDBLOCK:如果这是一个阻塞socket, 操作将被block... 阅读全文

posted @ 2013-08-02 15:24 胡永光 阅读(191) 评论(0) 推荐(0) 编辑

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

posted @ 2013-08-02 14:28 胡永光 阅读(130) 评论(0) 推荐(0) 编辑

UNIX网络编程——解决TCP网络传输“粘包”问题
摘要:当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user... 阅读全文

posted @ 2013-08-01 19:06 胡永光 阅读(156) 评论(0) 推荐(0) 编辑

UNIX网络编程——Socket粘包问题
摘要:一、两个简单概念长连接与短连接:1、长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2、短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个C... 阅读全文

posted @ 2013-08-01 18:28 胡永光 阅读(232) 评论(0) 推荐(0) 编辑

UNIX网络编程——Socket/TCP粘包、多包和少包, 断包
摘要:为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整。为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可... 阅读全文

posted @ 2013-08-01 17:53 胡永光 阅读(364) 评论(0) 推荐(0) 编辑

UNIX网络编程——利用ARP和ICMP协议解释ping命令
摘要:一、MTU 以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit) 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行... 阅读全文

posted @ 2013-08-01 15:38 胡永光 阅读(147) 评论(0) 推荐(0) 编辑

UNIX网络编程——利用recv和readn函数实现readline函数
摘要:在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是... 阅读全文

posted @ 2013-08-01 15:20 胡永光 阅读(230) 评论(0) 推荐(0) 编辑

UNIX网络编程——tcp流协议产生的粘包问题和解决方案
摘要:我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是... 阅读全文

posted @ 2013-08-01 14:37 胡永光 阅读(151) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示