- 博客(83)
- 资源 (11)
- 收藏
- 关注
原创 C++类的函数重载
本文讨论C++中类的函数重载。下面的一个例子#include using namespace std;class Base{public: int display(int n_count){ cout <<"display function defined in the Class Base"<<endl;
2012-12-23 12:55:02 5469 1
原创 一个C++中智能指针的设计
在C++中,智能指针是存储一些动态分配对象或者资源的类,主要用于控制资源或者动态对象的使用生存期,设计的目的如下:保证能够正确的分配和销毁动态对象或者资源,以防止内存泄露等问题。跟踪对象或者资源的使用情况。智能指针的实现一般都是使用引用计数,将一个计数器与使用的指针相关联起来,此时引用计数器跟踪该所属类有外部多少共享。因此在实现的时候,就有两个根本的部分计数表示。用于实
2012-11-27 15:58:04 1428
转载 Bloom Filter概念和原理
转载自:http://blog.csdn.net/jiaomeng/article/details/1495500 Bloom Filter(中文名称是:布隆过滤器)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元
2012-11-27 11:36:51 817
原创 assert宏的深入学习
assert宏的原型定义在头文件assert.h中,它的作用是如果宏后面的条件返回假,则终止程序的执行,该宏会调用__assert_fail函数,这个函数内部会先向stderr输出错误信息,然后调用abort函数来终止程序的执行。一,assert宏的定义如下:# define assert(expr)
2012-11-23 11:25:55 4454
原创 C++实现的命令行参数管理
在编写可运行程序时,经常需要输入除了可运行文件之外的其它的命令行参数,可以用传统的getopt函数来分析,本文基于面向对象,分析一种管理命令行参数方法 -- 来源于webrtc项目,在阅读过程中,大家分享一下。一,传统命令行分析包含头文件:#include int getopt(int argc,char * const argv[ ],const char * optst
2012-11-20 15:34:24 5755
原创 No package 'gtk+-2.0' found的错误
在编译或者生成WebRTC工程文件时,可能会出现这样的错误No package 'gtk+-2.0' foundgyp: Call to 'pkg-config --cflags gtk+-2.0' returned exit status 1. while loading dependencies of trunk/peerconnection_all.gyp while trying t
2012-11-13 17:07:53 8393
原创 GTK安装出错
安装GTK时,在configure出现以下错误 checking for XOpenDisplay... no configure: error: *** libX11 not found. Check 'config.log' for more details.通过以下解决,虽然安装了很多东东,但还是不再出现问题了,看它安装的时候,估计就只需要一两个安装就行了。
2012-11-12 18:06:29 3694 1
翻译 WebRTC体系结构
本文是对webRTC体系结构介绍的简单翻译,原文也很简单,更多的看原文。原文地址:http://www.webrtc.org/reference/architecture WebRTC在不需要任何插件、也不需要下载或者安装什么东西的前提下,给WEB应用开发者提供在WEB上开发功能多样的、实时多媒体应用(如视频聊天)的接口。它的目标是帮助开发者很容易的在不同的浏览器、多样
2012-11-12 13:27:20 5715
原创 webRTC源码获取
在获取源码的时候,出现了很多问题,找了很多资料,在这里总结一下。必须要安装的软件如下:SVN,这个是必须的。可以安装TortoiseSVN,找个合适的版本就可以了。下载地址:http://sourceforge.net/projects/tortoisesvn/。这个软件等下可以直接需要用到。安装msysgit,这也是一定要安装的,因为等下需要用到。下载地址:http://code
2012-11-10 15:22:38 8915 1
原创 No module named yum 错误
在centos上,yum工具是一个很好用、很强大的工具,在系统一些软件升级之后,特别是python升级之后,发现yum 不好用了。出现这样的错误提示There was a problem importing one of the Python modulesrequired to run yum. The error leading to this problem was:
2012-11-09 16:13:25 10750 3
原创 inet_ntoa在64位机器上出错
inet_ntoa用法如下:char *inet_ntoa(struct in_addr in);就是将struct in_addr结构转换为IP地址的形式,struct in_addr这个结构应该不陌生吧,它的定义如下:struct in_addr{ unsigned long s_addr;}struct sockaddr_in { short in
2012-11-07 14:12:48 8345 1
转载 linux GCC -- C程序的编译
1简介GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Comp
2012-10-28 12:04:29 1181
原创 指定GCC库文件路径
如果我们项目在开发的时候,引用了其它的第三方库文件,可以会在GCC编译的时候,出现找不到库文件或者其它的错误,如之前在用libosip库的时候,没有指定库的安装路径,默认安装路径是/usr/local/lib目录下。GCC在编译的时候,需要头文件和库文件进行连接,其会搜索指定的目录来查找所需要的头文件和库文件,-I 选项可以向GCC的头文件搜索路径中添加一个新的搜索目录,如:gcc sip
2012-10-26 11:37:41 5776
转载 H.264视频的RTP荷载格式
H.264视频的RTP荷载格式Status of This Memo This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements.
2012-10-25 17:04:10 4752
转载 基于RTP协议的IP电话QoS监测及提高策略
1 引言 随着Internet和多媒体技术的飞速发展,Internet已由早期的单一数据传输网向多媒体数据(视频、音频、文本等)综合传输网发展。但Internet提供的只是尽力而为的服务,不能满足多媒体应用程序对传输延迟、包丢失、抖动控制等要求,为了能在传统的IP网上运行多媒体程序,必须考虑服务质量(Ouality of Service,QoS)。QoS可用延迟、抖动、吞吐量、丢包率
2012-10-25 10:43:48 1539
原创 查看用户登录系统的日志
有两类日志记录用户登录的行为,一是记录登录者的数据,一个是记录用户的登录时间一,记录用户登录数据 /var/log/wtmp日志文件记录用户登录的数据。但这个文件是被编码的文件,不能直接用vi、cat等命令查看,可以用last命令读取。每一次登录就会产生一条记录,包括用户名、登录端、时间跨度等信息,如下:[root@bogon ~]# lastroot pt
2012-10-24 18:01:42 7314
原创 poll调用深入解析
poll调用和select调用实现的功能一样,都是网络IO利用的一种机制。先看一下poll的调用形式一,poll调用#include int poll(struct pollfd fds[], nfds_t nfds, int timeout);struct pollfd结构如下:【在源码文件poll.h文件中】struct pollfd { int fd; shor
2012-10-23 10:50:11 19648 6
原创 内核的文件系统的注册
在linux内核中的文件管理模块中,VFS机制居功至伟,VFS是virtual file system的缩写,表示为虚拟文件系统,它可以实现在Linux操作系统中可以同时有多个不同的文件系统在工作,并且不同文件系统之间的差异性对应用层是完全透明的。VFS本身并不是一种技术,而是多种技术手段和数据结构的集合,比如对进程抽象文件管理,如果将系统文件管理转换成对文件外存的块管理,如何加快对文件的操作,诸
2012-10-22 11:59:53 2303
转载 tcpdump用法详解
一,命令行格式tcpdump采用命令行方式,它的命令格式为:tcpdump [-adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]二,选项介绍-a 将网络地址和广播地址转变成名字;-d 将匹配信息包的代
2012-10-14 13:21:13 1042
原创 TCP连接的终止过程
在建立一个连接需要客户端和服务端进行三次握手,而终止一个连接需要经过4次握手。[root@localhost /]# tcpdump -S tcp port 5210tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Et
2012-10-14 10:16:50 4122
原创 TCP连接的建立过程
TCP是一个面向连接和协议,在发送数据之前,任何交互都要基于连接才能完成。本博文讨论连接的建立过程。我在本机上打开一个端口,然后对这个端口telnet,连接之后,会将其断开,并用tcpdump对其TCP数据传输进行输出,如果对TCP首部不是特别了解,可以参考博文【TCP/IP:认识TCP】一,测试输出调用telnettelnet 192.168.1.105 5210输出如下
2012-10-14 09:49:24 8373
原创 内核的bootmem内存分配器
在内核启动期间,伙伴系统内存管理器还没有建立之前,内核此时也要分配内存以及创建一些用于建立内存管理等机制的数据结构,此时内存分配和管理就是由bootmem内存分配器来完成的。bootmem的建立要求就是简单,越简单越好,因为一旦伙伴系统建立之后,就不需要bootmem了,因此对性能和通用性等要服从一切从简的原则。在了解这个分配器之后,就会知道它真的很简单。该分配器使用一个位图来管理页,位图
2012-10-05 11:10:33 2847
原创 Apache模块开发指南-APR池
博文主要内容来自APR_POOL的帮助文档APR的意思是Apache可移植运行库,是Apache portable Run-time Libraries的缩写,主要是为编写上层的应用程序提供一个跨平台使用的接口,在早期的时候,为了应用程序在多个操作系统和平台上能够运行,应用本身需要处理各种具体的细节,针对不同的平台调用不同的处理函数等等,到了今天,这些操作平台之间不同的调用以及细节处理都有一个
2012-10-03 15:47:23 5821
原创 Apache的多处理模块MPM
本博文主要参数 Apache 2.2文档以及Apache模块开发指南Apache的整个运行可以分为两个阶段:启动阶段和运行阶段。 在启动阶段时,它以ROOT特权来启动,进行解析配置文件(一般就是httpd.conf)、加载模块和初始化一些日志文件及内存共享段等操作,在启动阶段准备结束时,apache的控制转向多处理模块MPM,此时使得MPM能够在系统特权级运行,从而管理
2012-10-03 13:57:13 4838
原创 Linux内核线程
内核线程是直接由内核来启动的进程,通常也称为守护进程,用于执行下列任务内存页很少使用时,换出。管理延时的动作。实现文件系统的事务日志。周期性的将修改的内存页与页来源块设备同步。其它。内核线程按照工作方式可以分为两种类型:线程启动后一直在等待,直到内核请求线程执行某一特定操作。线程启动后按周期性间隔运行,检测特定资源的使用等操作,在必要时采取一些行动。一,内核线程创建
2012-09-29 11:34:14 3103
原创 Linux内核中的上下文切换
在调度器选择新的可用的进程之后,不是马上可以执行运行这个进程,而是必须处理与多任务相关的一些环节,所有这些环节就组成了上下文切换。在调度函数schedule中,有这样的一个片段,这个函数主要用于在就绪队列上寻找下一个可以运行的进程。asmlinkage void __sched schedule(void){ struct rq *rq;//这表示就绪队列。....
2012-09-29 10:51:03 11655
原创 内核进程的复制
在通过fork系统调用创建进程时,最终会进入内核的do_fork函数,这个函数的大部分工作都是进程的复制,就是把大部分工作都委托给函数copy_process函数来完成。本博文主要讨论进程的复制工作。下面分成几个段,所在代码包含了整个copy_process函数一,标志检查static struct task_struct *copy_process(unsigned long c
2012-09-28 16:49:12 1908
原创 Linux进程ID的内核管理
在进程创建的时候,Linux系统会分配一个号码给当前这个进程,这个号码在进程所在的命名空间中是唯一的,但在其它的兄弟进程中,这个号码就不是唯一的了,也就是对于全局的命名空间来说,这个号不是全局唯一。这个号码就是进程的ID号,简称为PID。一,进程号数据结构表示这个PID被保存在进程的结构表示task_struct中。struct task_struct{.... pid
2012-09-28 14:08:29 4157 1
原创 Linux内核的Container_of机制
在内核的原码文件 kernel.h文件中,定义了一个宏container_of,如下:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container
2012-09-28 13:33:06 3380
原创 Linux中tee命令的使用
tee命令的作用像字母T一样,很形象的表示了它的功能:它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果需要在输出到文件的同时,也把信息显示到屏幕上输出,那这个命令就再合适不过了。一般格式如下:tee -a files-a选项表示追加到文件末尾。如:[root@localhost practise]# who | tee who.logroot :0
2012-09-27 22:13:01 6031
原创 日志模块的C语言实现
一,模块接口模块接口比较简单,因为主要只有写日志的操作。创建日志模块变量log_t log_new(log_type_t type,const char *file, const char *facility);log_type_t用于控制日志的类型,可以标识为系统日志,文件以及标准输出,是一个枚举类型,定义如下:typedef enum { log_STD
2012-09-27 19:03:19 13915 2
原创 C语言的HashTable简单实现
HashTable是在实际应用中很重要的一个结构,下面讨论一个简单的实现,虽然简单,但是该有的部分都还是有的。一,访问接口创建一个hashtable.hashtable hashtable_new(int size) // size表示包含的接点个数。存入key-value至hashtable中。void hashtable_put(hashtable h,const
2012-09-27 16:35:42 17821 3
原创 Makefile.am文件的实例讲解
Makefile.am是一种比Makefile更高层次的编译规则,可以和configure.in文件一起通过调用automake命令,生成Makefile.in文件,再调用./configure的时候,就将Makefile.in文件自动生成Makefile文件了。所以Makefile.am文件是比Makefile文件更高的抽象。下面我根据自己的工作中的一些应用,来讨论Makefile.am的编
2012-09-27 11:22:00 67732 12
原创 Linux中find命令使用
Find命令的一般形式为:find pathname -options [-print -exec -ok]参数说明如下:pathname:find命令所查找的目录路径。-print:find命令将匹配的文件输出到标准输出。-exec:find命令对匹配的文件执行该参数所给出的shell命令,在这之后的命令的形式为'coomand' {} \;,这里要注意{}+空格+\;
2012-09-26 10:10:22 1758
原创 TCP/IP:认识TCP
TCP和UDP都处在网络模型的传输层,并且都使用相同的网络层,TCP提供一种面向连接的、可靠的字节流服务。TCP通过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块,由TCP传递给IP的信息单位称为报文段或者段,对于段的长度,是由一些策略决定的,和应用层相关。当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个
2012-09-25 09:05:34 2167
转载 Socket编程指南
介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了。 ---------------------------
2012-09-24 22:22:37 852
原创 二进制日志过滤器
二进制日志过滤器可以通过两个选项从二进制日志中过滤语句:binlog-do-db和binlog-ignore-db一,binlog-do-db使用 binlog-do-db=db_name。使用这个选项后,主服务器会判断当前的数据库(即USE选定的数据库)是否是db_name,如果是,则会将更新记录到二进制日志中。在使用之后,其它所有没有明显指定的数据库 都会被忽略。如果使用该选项,你应
2012-09-24 15:30:52 1147
原创 MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
在应用时,经常要使用这两个函数TIMESTAMPDIFF和TIMESTAMPADD。一,TIMESTAMPDIFF语法:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。说明:返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval
2012-09-24 09:55:58 97589 6
原创 获取数据库元数据
MySQL 提供几种办法以使获取关于数据库和数据库里各种对象(也就是数据库的元数据)的信息,如下:SHOW语句,如SHOW TABLES等等。INFORMATION_SCHEMA数据库里的数据表。命令行程序,如mysqlshow或者是mysqldump。一,用SHOW语句获取获取服务器所管理的数据库。SHOW DATABASES; 查看给定数据库的创
2012-09-24 08:40:19 3753
原创 浅析MySQL二进制日志
一般情况下,二进制日志更多的用于数据库的同步,因为二进制日志记录了数据库的所有改变,可以使得SLAVE都可以执行同样的更新,其实二进制日志可以对数据库作一个写入回放,所以也可以用于统计或者即时恢复等其它的目的。二进制日志仅仅包含可能改变数据库的语句,估计都很容易理解这个,但是那些还没有改变且有可能改变数据库的语句也会记录下来,比如drop table if exists或者是带有WHERE条件
2012-09-23 22:57:50 2594
命令行输入管理
2012-11-20
p2p的概念介绍
2012-11-16
基于LBS应用研究报告
2012-02-23
ANDROID 2.0游戏开发实战宝典.part2
2011-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人