2013年9月28日

摘要: 抽象工厂:提供一个创建一系列相关或相互依赖对象的接口(抽象工厂类),而无需指定他们具体的类。 抽象工厂模式的实现:1、定义抽象工厂 抽象类MazeFactory以定义一系列创建对象的接口。2、修改客户创建产品的函数,使得该函数可以接收具体工厂类对象,通过抽象工厂方法来创建产品元素对象,避免客户代码对具体类的引用。客户代码仅引用抽象工厂类MazeFactory和抽象产品类Room、Door、Wall。抽象工厂模式在迷宫地图创建中的实现:/* 抽象工厂类 */class MazeFactory {public: MazeFactory(); virtual Maze* M... 阅读全文
posted @ 2013-09-28 23:25 黑猫警长V5 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 分析qemu开源代码有一段时间了,时常惊叹于qemu中某些功能实现的灵活巧妙,qemu中对于I/O的处理方法、qemu设备模型、qemu中的通知链等。阅读qemu代码时常想起已经忘记的差不多的设计模式,在学校时曾经阅读过设计模式方面的书籍,当时理解的就相当的抽象,加上毕业后的工作中编写代码的机会很少,以至于大部分都已经忘得差不多。 对于开源软件的分析,再一次感受到设计模式在一款优秀软件中的至关重要的作用,希望这几天抽时间再次翻一翻设计模式相关的书籍,将重要的知识点和理解记录下来,希望能够对软件设计方法能够有更加深层次的理解。下面首先是针对 对象创建型设计模式的总结。 在代码中直接实例化... 阅读全文
posted @ 2013-09-28 22:00 黑猫警长V5 阅读(392) 评论(0) 推荐(0) 编辑

2013年9月21日

摘要: 通过两种方式可以关闭一个socket:close和shutdown。直接调用close关闭socket存在以下两个问题:1. close只是将socket 描述字的访问计数减1,仅当描述字的访问计数为0时,才真正的关闭socket。2.close终止了数据传输的两个方向:读与写。tcp管道是全双工的,有时候我们仅仅是想通知另一端我们已经完成了数据的发送,但还想继续接收另一端发送过来的数据,在这种情况下调用close关闭socket是不合适的。 shutdown可以解决上面关于close的两个问题,shutdown系统调用如下:#include /* 以how指定的方式关闭socket *... 阅读全文
posted @ 2013-09-21 20:45 黑猫警长V5 阅读(555) 评论(0) 推荐(0) 编辑
摘要: I/O复用:当一个或多个I/O条件满足时,我们就被通知到,这种能力被称为I/O复用。1.I/O复用的相关系统调用 posix的实现提供了select、poll、epoll两类系统调用以及相关的函数来实现I/O复用。select以及相关联的函数如下所示:#include /* 功能:监听多个fd,等待指定的fd指定的事件发生或者超时。 * nfds: 最大描述符加1。 * readfds:监听读fd集合。 * writefds:监听写fd集合。 * exceptfds:监听出错fd集合。 * timeout:超时时间,null-select一直阻塞直到指定时间发生,0-select不阻塞立... 阅读全文
posted @ 2013-09-21 18:05 黑猫警长V5 阅读(407) 评论(0) 推荐(0) 编辑

2013年9月19日

摘要: 接触unix网络编程一年多了,偶尔用户态进程表现出一些不能理解的现象,因此将《TCP/IP协议卷1》TCP协议相关的章节通读了一遍,总结了一下相关的知识点。1.TCP数据报格式 TCP封装在IP数据报中,如下:------------------------------------------------------------------------------------- |----IP首部(20字节)----||----TCP首部(20字节)||----TCP选项----||----TCP数据----| TCP数据包首部的格式如下: |--------16位源端口号----... 阅读全文
posted @ 2013-09-19 22:19 黑猫警长V5 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 第二部分介绍了基于多进程模型的回射服务器的实现,对于每一个客户请求服务器端创建一个子进程来处理和响应客户的请求。最后提到了,服务器主进程没有对子进程的结束进行处理,没有捕捉SIGCHLD信号,导致子进程结束后变成了僵尸进程,仍然存在于系统,僵尸进程将消耗内核资源。接下来总结了linux 系统信号处理相关的知识点,并对第二部分的回射服务器程序完成,增加对SIGHLD信号的处理,避免子进程成为僵尸进程。 1.linux信号处理基本知识 信号是发生某件事时对进程的通知,信号有时称为软中断。除了SIGKILL和SIGSTOP信号外,其他的信号都可以注册自己的信号处理函数,当进程收到该信号时将自... 阅读全文
posted @ 2013-09-19 22:16 黑猫警长V5 阅读(419) 评论(0) 推荐(0) 编辑

2013年8月18日

摘要: 写一个服务器端程序很简单,但是写好一个服务器端程序并不简单,需要考虑到信号处理、性能、稳定性以及日志等很多问题。参考unp编程这本书,以一个回射服务器为例,通过不断的完善这个回射服务器程序,来学习如何编写一个性能、稳定性以及可维护性良好的服务器程序。 1.首先给出客户端程序代码,客户端程序相对要考虑的东西较少,比较简单(引用UNP示例代码):int main(int argc, char **argv){ int sockfd; struct sockaddr_in servaddr; if (argc != 2) ... 阅读全文
posted @ 2013-08-18 21:01 黑猫警长V5 阅读(430) 评论(0) 推荐(0) 编辑

2013年8月11日

摘要: 接触网络编程一年多了,最近在系统的学习vnp两本书,对基础知识做一些总结,希望理解的更透彻清晰,希望能有更多的沉淀。1.套接口地址 针对IPv4和IPv6地址族,分别定义了两种类型的套接口地址:sockaddr_in和sockaddr_in6,两种套接口地址结构如下所示: /* IPv4地址族套接口地址结构 */ struct in_addr { in_addr_t s_addr; /* IPv4地址,网络序存储 */ } struct sockaddr_in { uint8_t sin_len; /* 结构体大小... 阅读全文
posted @ 2013-08-11 20:16 黑猫警长V5 阅读(462) 评论(0) 推荐(0) 编辑

2013年6月3日

摘要: 最近发现scdn的广告直接投递到个人博客的开头了,越看越不爽,觉得cnblog的博客比较清爽,居然发现自己很早以前就在cnblog注册了账号,那就迁到这里来了~ 阅读全文
posted @ 2013-06-03 00:28 黑猫警长V5 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 工作中需要修改系统配置文件,或者是经常使用的shell脚本,这些东西过一段时间就忘了,每次使用都需要重现goole搜索,以后这些东西在这里做个记录,以后忘了直接看自己的博客,不用每次都去搜索了。linux系统文件: /etc/sysconfig/init.d/boot.local /*用于设置系统启动运行命令或脚本等*/ /etc/inittab /*设置系统启动级别,5-启动图形桌面,3-控制台方式*/常用shell脚本: 阅读全文
posted @ 2013-06-03 00:19 黑猫警长V5 阅读(168) 评论(0) 推荐(0) 编辑

导航