C++中接口与实现分离的技术
在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与实现分离的技术。
下面用一个最简单的例子来说明。
继续阅读 »
Linux平台静态库、动态库的一些笔记
先声明几点:
1、操作系统:linux(fc9)、编译器:gcc-4.3.0、编辑器:包括但不限于emacs、vim。这些无理由也不应造成限制。
2、生成的可执行文件名称比较有规律,仅仅是为了演示的方便。比如使用静态库生成的是foo,不同的生成方法得到的可执行文件可能会是foo-a、foo-b……,而使用动态库生成的是foobar,可能会是foobar-a、foobar-b……,等等。
3、木草山人正在看的那本《程序员的自我修养——链接、装载与库》只看了前面部分,而且还只看第一遍,很多知识不牢固。因此不会深入讲述原理性的东西,比如静态库与动态库的优点与缺点,它们是怎么加载的。此外也不涉及共享库版本、兼容性以及SO-NAME,等等——很多时候,我们不必要追根问底,特别是在计算机领域中。
继续阅读 »
Linux中的IO复用接口简介
I/O复用是Linux中的I/O模型之一。所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞。
在Linux中,提供了select、poll、epoll三类接口来实现I/O复用。
select函数接口
select中主要就是一个select函数,用于监听指定事件的发生,原型如下:
继续阅读 »
网络服务端开发小结(短连接、长连接、进程池、线程池)
平时对网络编程方面比较感兴趣,看了一些相关的资料,自己也尝试写过一些不同网络模型的服务程序。这次刚好有一个新的需求,需要开发一个转发服务器。之前开发的项目,网络通讯都是处理联机交易的,网络连接都是采用短连接,这次的服务端,采用长连接的方式。
继续阅读 »
一个简单的游戏服务器框架
最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。
继续阅读 »
一个进程池的服务器程序
下面做了非常简单的http服务器,该服务器只能接收Get请求。
流程大概如下:
1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe)
2,父进程预fork n个子进程
3,各个子进程accept(listenfd),即所有子进程竞争accept请求。由于listenfd是在fork之前就有的,所以所有子进程都可以访问到,不需用到“进程间文件描述符传递”问题;
4,子进程每accept到一个请求都告诉父进程,父进程把请求数加1;子进程没完成一个请求,父进程把请求数减1;当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。
总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。
继续阅读 »
QTE中如何支持GIF、JPEG等格式图片
1. ./configure配置QTE的时候需要添加相应的参数:-qt-gif -qt-libjpeg
2. 交叉编译,安装完成后,在安装目录中有 plugins/imageformats 这样的目录,里面有libqgif.so,libqjpeg.so等动态库文件。
3. 在目标板上某目录内建立插件目录plugins/imageformats(如:/usr/lib/plugins/imageformats),再将libqgif.so, libqjpeg.so等文件复制进来。
4. 在QT应用程序中,main函数刚开始的地方添加代码:QApplication::addLibraryPath(“/usr/lib/plugins”);
5. done!
继续阅读 »
移植mysql到嵌入式ARM平台
MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.php?uid=9701860&do=blog&id=285428,因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。进行如下步骤完成移植:
继续阅读 »
近期评论